OpenJDK / portola / portola
changeset 7949:073e8ab25a02
6892493: potential memory leaks in 2D font code indentified by parfait.
Reviewed-by: bae, igor
author | prr |
---|---|
date | Fri, 21 Jan 2011 07:59:15 -0800 |
parents | 6711180a6212 |
children | dc8f97e15f9b |
files | jdk/src/solaris/native/sun/awt/fontpath.c |
diffstat | 1 files changed, 26 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/jdk/src/solaris/native/sun/awt/fontpath.c Thu Jan 20 13:56:26 2011 -0800 +++ b/jdk/src/solaris/native/sun/awt/fontpath.c Fri Jan 21 07:59:15 2011 -0800 @@ -1120,6 +1120,7 @@ } pattern = (*FcNameParse)((FcChar8 *)fcName); if (pattern == NULL) { + (*env)->ReleaseStringUTFChars(env, fcNameStr, (const char*)fcName); closeFontConfig(libfontconfig, JNI_FALSE); return; } @@ -1136,6 +1137,8 @@ (*FcDefaultSubstitute)(pattern); fontset = (*FcFontSort)(NULL, pattern, FcTrue, NULL, &result); if (fontset == NULL) { + (*FcPatternDestroy)(pattern); + (*env)->ReleaseStringUTFChars(env, fcNameStr, (const char*)fcName); closeFontConfig(libfontconfig, JNI_FALSE); return; } @@ -1153,6 +1156,21 @@ file = (FcChar8**)calloc(nfonts, sizeof(FcChar8*)); if (family == NULL || styleStr == NULL || fullname == NULL || file == NULL) { + if (family != NULL) { + free(family); + } + if (styleStr != NULL) { + free(styleStr); + } + if (fullname != NULL) { + free(fullname); + } + if (file != NULL) { + free(file); + } + (*FcPatternDestroy)(pattern); + (*FcFontSetDestroy)(fontset); + (*env)->ReleaseStringUTFChars(env, fcNameStr, (const char*)fcName); closeFontConfig(libfontconfig, JNI_FALSE); return; } @@ -1179,6 +1197,14 @@ result = (*FcPatternGetCharSet)(fontPattern, FC_CHARSET, 0, &charset); if (result != FcResultMatch) { + free(family); + free(family); + free(styleStr); + free(file); + (*FcPatternDestroy)(pattern); + (*FcFontSetDestroy)(fontset); + (*env)->ReleaseStringUTFChars(env, + fcNameStr, (const char*)fcName); closeFontConfig(libfontconfig, JNI_FALSE); return; }