Hello , maybe someone with more OSX dev knowledge could comment on this . If I understand it correctly , the OSX Core Foundation Ownership Policy :
https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/uid/20001148-103029 says that "Object-duplication functions that have "Copy" embedded in the name." (like CFLocaleCopyCurrent ) need to relinquish ownership (using CFRelease<https://developer.apple.com/documentation/corefoundation/1521153-cfrelease>) when you have finished with it. Should we better add then CFRelease to the 2 CFLocaleCopyCurrent usages in src/java.base/macosx/native/libjava/java_props_macosx.c (coding below) ? Or do I miss something ? Thanks , Matthias --- a/src/java.base/macosx/native/libjava/java_props_macosx.c Fri Jul 19 10:18:48 2019 +0200 +++ b/src/java.base/macosx/native/libjava/java_props_macosx.c Mon Jul 22 12:47:21 2019 +0200 @@ -91,18 +91,22 @@ if (hyphenPos == NULL || // languageString contains ISO639 only, e.g., "en" languageString + langStrLen - hyphenPos == 5) { // ISO639-ScriptCode, e.g., "en-Latn" - CFStringGetCString(CFLocaleGetIdentifier(CFLocaleCopyCurrent()), - localeString, LOCALEIDLENGTH, CFStringGetSystemEncoding()); - char *underscorePos = strrchr(localeString, '_'); - char *region = NULL; + CFLocaleRef cflocale = CFLocaleCopyCurrent(); + if (cflocale != NULL) { + CFStringGetCString(CFLocaleGetIdentifier(cflocale), + localeString, LOCALEIDLENGTH, CFStringGetSystemEncoding()); + char *underscorePos = strrchr(localeString, '_'); + char *region = NULL; - if (underscorePos != NULL) { - region = underscorePos + 1; - } + if (underscorePos != NULL) { + region = underscorePos + 1; + } - if (region != NULL) { - strcat(languageString, "-"); - strcat(languageString, region); + if (region != NULL) { + strcat(languageString, "-"); + strcat(languageString, region); + } + CFRelease(cflocale); } } @@ -112,12 +116,18 @@ default: { - if (!CFStringGetCString(CFLocaleGetIdentifier(CFLocaleCopyCurrent()), - localeString, LOCALEIDLENGTH, CFStringGetSystemEncoding())) { + CFLocaleRef cflocale = CFLocaleCopyCurrent(); + if (cflocale != NULL) { + if (!CFStringGetCString(CFLocaleGetIdentifier(cflocale), + localeString, LOCALEIDLENGTH, CFStringGetSystemEncoding())) { + return NULL; + } + + retVal = localeString; + CFRelease(cflocale); + } else { return NULL; } - - retVal = localeString; } break; }