From 3006b95a02dc2319971a72f3a08af94c620913b0 Mon Sep 17 00:00:00 2001 From: rNoz Date: Tue, 28 Jul 2026 10:43:42 +0200 Subject: [PATCH] fix(macos): null-check the input source languages before counting them TISGetInputSourceProperty returns NULL for an input source that has no kTISPropertyInputSourceLanguages value, but both loops evaluate CFArrayGetCount(layoutLanguages) before the "&& layoutLanguages" guard. The guard is therefore dead and CFArrayGetCount dereferences NULL. Test the pointer first. Signed-off-by: rNoz --- src/lib/deskflow/unix/AppUtilUnix.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/deskflow/unix/AppUtilUnix.cpp b/src/lib/deskflow/unix/AppUtilUnix.cpp index bd31a0bf1..3f3990a80 100644 --- a/src/lib/deskflow/unix/AppUtilUnix.cpp +++ b/src/lib/deskflow/unix/AppUtilUnix.cpp @@ -77,7 +77,7 @@ std::vector AppUtilUnix::getKeyboardLayoutList() layoutLanguages = (CFArrayRef)TISGetInputSourceProperty(keyboardLayout, kTISPropertyInputSourceLanguages); } char temporaryCString[128] = {0}; - for (CFIndex index = 0; index < CFArrayGetCount(layoutLanguages) && layoutLanguages; index++) { + for (CFIndex index = 0; layoutLanguages && index < CFArrayGetCount(layoutLanguages); index++) { auto languageCode = (CFStringRef)CFArrayGetValueAtIndex(layoutLanguages, index); if (!languageCode || !CFStringGetCString(languageCode, temporaryCString, 128, kCFStringEncodingUTF8)) { continue; @@ -163,7 +163,7 @@ std::string AppUtilUnix::getCurrentLanguageCode() layoutLanguages = (CFArrayRef)TISGetInputSourceProperty(source.get(), kTISPropertyInputSourceLanguages); } char temporaryCString[128] = {0}; - for (CFIndex index = 0; index < CFArrayGetCount(layoutLanguages) && layoutLanguages; index++) { + for (CFIndex index = 0; layoutLanguages && index < CFArrayGetCount(layoutLanguages); index++) { auto languageCode = (CFStringRef)CFArrayGetValueAtIndex(layoutLanguages, index); if (!languageCode || !CFStringGetCString(languageCode, temporaryCString, 128, kCFStringEncodingUTF8)) { continue;