--- old/src/java.desktop/unix/native/common/awt/fontpath.c 2017-01-13 15:08:28.834842255 -0800 +++ new/src/java.desktop/unix/native/common/awt/fontpath.c 2017-01-13 15:08:28.678842256 -0800 @@ -1167,6 +1167,7 @@ } pattern = (*FcNameParse)((FcChar8 *)fcName); (*env)->ReleaseStringUTFChars(env, fcNameStr, (const char*)fcName); + (*env)->DeleteLocalRef(env, fcNameStr); if (pattern == NULL) { closeFontConfig(libfontconfig, JNI_FALSE); return; @@ -1326,20 +1327,24 @@ jstr = (*env)->NewStringUTF(env, (const char*)family[j]); if (IS_NULL(jstr)) break; (*env)->SetObjectField(env, fcFont, familyNameID, jstr); + (*env)->DeleteLocalRef(env, jstr); if (file[j] != NULL) { jstr = (*env)->NewStringUTF(env, (const char*)file[j]); if (IS_NULL(jstr)) break; (*env)->SetObjectField(env, fcFont, fontFileID, jstr); + (*env)->DeleteLocalRef(env, jstr); } if (styleStr[j] != NULL) { jstr = (*env)->NewStringUTF(env, (const char*)styleStr[j]); if (IS_NULL(jstr)) break; (*env)->SetObjectField(env, fcFont, styleNameID, jstr); + (*env)->DeleteLocalRef(env, jstr); } if (fullname[j] != NULL) { jstr = (*env)->NewStringUTF(env, (const char*)fullname[j]); if (IS_NULL(jstr)) break; (*env)->SetObjectField(env, fcFont, fullNameID, jstr); + (*env)->DeleteLocalRef(env, jstr); } if (fn==0) { (*env)->SetObjectField(env, fcCompFontObj, @@ -1348,10 +1353,13 @@ if (includeFallbacks) { (*env)->SetObjectArrayElement(env, fcFontArr, fn++,fcFont); } else { + (*env)->DeleteLocalRef(env, fcFont); break; } + (*env)->DeleteLocalRef(env, fcFont); } } + (*env)->DeleteLocalRef(env, fcCompFontObj); (*FcFontSetDestroy)(fontset); (*FcPatternDestroy)(pattern); free(family);