From 099560c59c1196f8f32e1ef6f40a29d6882f8d92 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Wed, 5 Jan 2022 18:35:00 +0900 Subject: [PATCH] fix: crash caused by app.getLocaleCountryCode() (#32332) CFLocaleGetValue() returned null and crashed the process when app.getLocaleCountryCode() was run on a CircleCI metal resource class macOS instance with Xcode 12.5.1. This change fixes that logic and adds further checks to make the code future-proof. Here too people are complaining that the returned country code migth be null: https://stackoverflow.com/questions/15202454/nslocalecountrycode-returns-nil Signed-off-by: Darshan Sen Co-authored-by: Darshan Sen --- shell/browser/api/electron_api_app.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/shell/browser/api/electron_api_app.cc b/shell/browser/api/electron_api_app.cc index 6c94aa0a7caed..c2af467cbd6f6 100644 --- a/shell/browser/api/electron_api_app.cc +++ b/shell/browser/api/electron_api_app.cc @@ -1044,11 +1044,14 @@ std::string App::GetLocaleCountryCode() { CFLocaleRef locale = CFLocaleCopyCurrent(); CFStringRef value = CFStringRef( static_cast(CFLocaleGetValue(locale, kCFLocaleCountryCode))); - const CFIndex kCStringSize = 128; - char temporaryCString[kCStringSize] = {0}; - CFStringGetCString(value, temporaryCString, kCStringSize, - kCFStringEncodingUTF8); - region = temporaryCString; + if (value != nil) { + char temporaryCString[3]; + const CFIndex kCStringSize = sizeof(temporaryCString); + if (CFStringGetCString(value, temporaryCString, kCStringSize, + kCFStringEncodingUTF8)) { + region = temporaryCString; + } + } #else const char* locale_ptr = setlocale(LC_TIME, nullptr); if (!locale_ptr)