Hi Matthias,
Thanks for catching them. Yes, I believe they should be released
appropriately.
Naoto
On 7/22/19 4:01 AM, Baesken, Matthias wrote:
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;
}