-
Notifications
You must be signed in to change notification settings - Fork 35
Crash at launch on macOS 26 — infinite recursion in SecKeychainFindGenericPassword / HSMasterPasswordHelper #1112
Description
Bug Report: Crash at launch on macOS 26
Environment
- App: SQLPro for MSSQL
- Version: 2026.07 (115707.5)
- macOS: macOS 26.4 (25E246)
- Hardware: Apple Silicon (ARM-64, Mac17,8)
Description
The app crashes immediately at launch every time. It is not possible to get past the startup screen. I have already tried:
- Clearing Keychain entries for
SQLPro/hankinsoftvia Keychain Access - Running
defaults delete com.hankinsoft.osx.tinysqlstudioin Terminal
Neither resolved the issue.
Crash Summary
The crash is caused by infinite recursion (7,452 levels deep) triggered at startup when the app attempts to initialize HSMasterPasswordHelper and access the Keychain via SecKeychainFindGenericPassword. A CSSMError is thrown (via ldapdl) and caught in a loop that never terminates, eventually overflowing the stack.
Exception: EXC_BAD_ACCESS (SIGSEGV) — Thread stack size exceeded due to excessive recursion
Key stack frames:
CSSMError::ThrowCSSMError → LDAPDatabase::DbDataGetFirst → SecKeychainFindGenericPassword
→ [PDKeychainBindings objectForKey:] → [HSMasterPasswordHelper sharedInstance]
→ [SQLPro applicationDidFinishLaunching]
→ __cxa_rethrow [recursion x7452] → CRASH
The SecKeychainFindGenericPassword API (accessed via ldapdl) appears to be broken or unsupported on macOS 26, and the exception handler in the app is rethrowing the error in an infinite loop rather than gracefully handling the failure.
Steps to Reproduce
- Install SQLPro for MSSQL 2026.07 on macOS 26.4
- Launch the app
- App crashes immediately — no UI is shown
Expected Behavior
App should launch normally and handle a missing or inaccessible Keychain entry gracefully.
Notes
This appears to be related to the deprecation of legacy CSSM/Keychain APIs in macOS 26. The SecKeychainFindGenericPassword path through ldapdl is no longer functioning correctly. Migrating to modern Keychain APIs (SecItemCopyMatching) should resolve this.