提交 8bd31e72 编写于 作者: P prr

8035630: [parfait] JNI exception pending in jdk/src/windows/native/sun/font/fontpath.c

Reviewed-by: serb, jgodinez
上级 50f5f45b
...@@ -152,6 +152,10 @@ static int CALLBACK EnumFontFacesInFamilyProcA( ...@@ -152,6 +152,10 @@ static int CALLBACK EnumFontFacesInFamilyProcA(
/* printf("FULL=%s\n",lpelfe->elfFullName);fflush(stdout); */ /* printf("FULL=%s\n",lpelfe->elfFullName);fflush(stdout); */
fullname = JNU_NewStringPlatform(env, lpelfe->elfFullName); fullname = JNU_NewStringPlatform(env, lpelfe->elfFullName);
if (fullname == NULL) {
(*env)->ExceptionClear(env);
return 1;
}
fullnameLC = (*env)->CallObjectMethod(env, fullname, fullnameLC = (*env)->CallObjectMethod(env, fullname,
fmi->toLowerCaseMID, fmi->locale); fmi->toLowerCaseMID, fmi->locale);
(*env)->CallBooleanMethod(env, fmi->list, fmi->addMID, fullname); (*env)->CallBooleanMethod(env, fmi->list, fmi->addMID, fullname);
...@@ -242,6 +246,10 @@ static int CALLBACK EnumFontFacesInFamilyProcW( ...@@ -242,6 +246,10 @@ static int CALLBACK EnumFontFacesInFamilyProcW(
fullname = (*env)->NewString(env, lpelfe->elfFullName, fullname = (*env)->NewString(env, lpelfe->elfFullName,
(jsize)wcslen((LPWSTR)lpelfe->elfFullName)); (jsize)wcslen((LPWSTR)lpelfe->elfFullName));
if (fullname == NULL) {
(*env)->ExceptionClear(env);
return 1;
}
fullnameLC = (*env)->CallObjectMethod(env, fullname, fullnameLC = (*env)->CallObjectMethod(env, fullname,
fmi->toLowerCaseMID, fmi->locale); fmi->toLowerCaseMID, fmi->locale);
(*env)->CallBooleanMethod(env, fmi->list, fmi->addMID, fullname); (*env)->CallBooleanMethod(env, fmi->list, fmi->addMID, fullname);
...@@ -287,6 +295,10 @@ static int CALLBACK EnumFamilyNamesA( ...@@ -287,6 +295,10 @@ static int CALLBACK EnumFamilyNamesA(
return 1; return 1;
} }
fmi->family = JNU_NewStringPlatform(env,lpelfe->elfLogFont.lfFaceName); fmi->family = JNU_NewStringPlatform(env,lpelfe->elfLogFont.lfFaceName);
if (fmi->family == NULL) {
(*env)->ExceptionClear(env);
return 1;
}
familyLC = (*env)->CallObjectMethod(env, fmi->family, familyLC = (*env)->CallObjectMethod(env, fmi->family,
fmi->toLowerCaseMID, fmi->locale); fmi->toLowerCaseMID, fmi->locale);
/* check if already seen this family with a different charset */ /* check if already seen this family with a different charset */
...@@ -296,7 +308,10 @@ static int CALLBACK EnumFamilyNamesA( ...@@ -296,7 +308,10 @@ static int CALLBACK EnumFamilyNamesA(
} }
fmi->list = (*env)->NewObject(env, fmi->list = (*env)->NewObject(env,
fmi->arrayListClass, fmi->arrayListCtr, 4); fmi->arrayListClass, fmi->arrayListCtr, 4);
if (fmi->list == NULL) {
(*env)->ExceptionClear(env);
return 1;
}
(*env)->CallObjectMethod(env, fmi->familyToFontListMap, (*env)->CallObjectMethod(env, fmi->familyToFontListMap,
fmi->putMID, familyLC, fmi->list); fmi->putMID, familyLC, fmi->list);
...@@ -343,6 +358,10 @@ static int CALLBACK EnumFamilyNamesW( ...@@ -343,6 +358,10 @@ static int CALLBACK EnumFamilyNamesW(
} }
slen = wcslen(lpelfe->elfLogFont.lfFaceName); slen = wcslen(lpelfe->elfLogFont.lfFaceName);
fmi->family = (*env)->NewString(env,lpelfe->elfLogFont.lfFaceName, (jsize)slen); fmi->family = (*env)->NewString(env,lpelfe->elfLogFont.lfFaceName, (jsize)slen);
if (fmi->family == NULL) {
(*env)->ExceptionClear(env);
return 1;
}
familyLC = (*env)->CallObjectMethod(env, fmi->family, familyLC = (*env)->CallObjectMethod(env, fmi->family,
fmi->toLowerCaseMID, fmi->locale); fmi->toLowerCaseMID, fmi->locale);
/* check if already seen this family with a different charset */ /* check if already seen this family with a different charset */
...@@ -352,7 +371,10 @@ static int CALLBACK EnumFamilyNamesW( ...@@ -352,7 +371,10 @@ static int CALLBACK EnumFamilyNamesW(
} }
fmi->list = (*env)->NewObject(env, fmi->list = (*env)->NewObject(env,
fmi->arrayListClass, fmi->arrayListCtr, 4); fmi->arrayListClass, fmi->arrayListCtr, 4);
if (fmi->list == NULL) {
(*env)->ExceptionClear(env);
return 1;
}
(*env)->CallObjectMethod(env, fmi->familyToFontListMap, (*env)->CallObjectMethod(env, fmi->familyToFontListMap,
fmi->putMID, familyLC, fmi->list); fmi->putMID, familyLC, fmi->list);
...@@ -447,6 +469,10 @@ static void registerFontA(GdiFontMapInfo *fmi, jobject fontToFileMap, ...@@ -447,6 +469,10 @@ static void registerFontA(GdiFontMapInfo *fmi, jobject fontToFileMap,
JNIEnv *env = fmi->env; JNIEnv *env = fmi->env;
size_t dslen = strlen(data); size_t dslen = strlen(data);
jstring fileStr = JNU_NewStringPlatform(env, data); jstring fileStr = JNU_NewStringPlatform(env, data);
if (fileStr == NULL) {
(*env)->ExceptionClear(env);
return;
}
/* TTC or ttc means it may be a collection. Need to parse out /* TTC or ttc means it may be a collection. Need to parse out
* multiple font face names separated by " & " * multiple font face names separated by " & "
...@@ -467,6 +493,10 @@ static void registerFontA(GdiFontMapInfo *fmi, jobject fontToFileMap, ...@@ -467,6 +493,10 @@ static void registerFontA(GdiFontMapInfo *fmi, jobject fontToFileMap,
ptr1 = ptr2+3; ptr1 = ptr2+3;
} }
fontStr = JNU_NewStringPlatform(env, ptr1); fontStr = JNU_NewStringPlatform(env, ptr1);
if (fontStr == NULL) {
(*env)->ExceptionClear(env);
return;
}
fontStr = (*env)->CallObjectMethod(env, fontStr, fontStr = (*env)->CallObjectMethod(env, fontStr,
fmi->toLowerCaseMID, fmi->toLowerCaseMID,
fmi->locale); fmi->locale);
...@@ -481,6 +511,10 @@ static void registerFontA(GdiFontMapInfo *fmi, jobject fontToFileMap, ...@@ -481,6 +511,10 @@ static void registerFontA(GdiFontMapInfo *fmi, jobject fontToFileMap,
} }
} else { } else {
fontStr = JNU_NewStringPlatform(env, name); fontStr = JNU_NewStringPlatform(env, name);
if (fontStr == NULL) {
(*env)->ExceptionClear(env);
return;
}
fontStr = (*env)->CallObjectMethod(env, fontStr, fontStr = (*env)->CallObjectMethod(env, fontStr,
fmi->toLowerCaseMID, fmi->locale); fmi->toLowerCaseMID, fmi->locale);
(*env)->CallObjectMethod(env, fontToFileMap, fmi->putMID, (*env)->CallObjectMethod(env, fontToFileMap, fmi->putMID,
...@@ -496,6 +530,10 @@ static void registerFontW(GdiFontMapInfo *fmi, jobject fontToFileMap, ...@@ -496,6 +530,10 @@ static void registerFontW(GdiFontMapInfo *fmi, jobject fontToFileMap,
JNIEnv *env = fmi->env; JNIEnv *env = fmi->env;
size_t dslen = wcslen(data); size_t dslen = wcslen(data);
jstring fileStr = (*env)->NewString(env, data, (jsize)dslen); jstring fileStr = (*env)->NewString(env, data, (jsize)dslen);
if (fileStr == NULL) {
(*env)->ExceptionClear(env);
return;
}
/* TTC or ttc means it may be a collection. Need to parse out /* TTC or ttc means it may be a collection. Need to parse out
* multiple font face names separated by " & " * multiple font face names separated by " & "
...@@ -517,6 +555,10 @@ static void registerFontW(GdiFontMapInfo *fmi, jobject fontToFileMap, ...@@ -517,6 +555,10 @@ static void registerFontW(GdiFontMapInfo *fmi, jobject fontToFileMap,
ptr1 = ptr2+3; ptr1 = ptr2+3;
} }
fontStr = (*env)->NewString(env, ptr1, (jsize)wcslen(ptr1)); fontStr = (*env)->NewString(env, ptr1, (jsize)wcslen(ptr1));
if (fontStr == NULL) {
(*env)->ExceptionClear(env);
return;
}
fontStr = (*env)->CallObjectMethod(env, fontStr, fontStr = (*env)->CallObjectMethod(env, fontStr,
fmi->toLowerCaseMID, fmi->toLowerCaseMID,
fmi->locale); fmi->locale);
...@@ -531,6 +573,10 @@ static void registerFontW(GdiFontMapInfo *fmi, jobject fontToFileMap, ...@@ -531,6 +573,10 @@ static void registerFontW(GdiFontMapInfo *fmi, jobject fontToFileMap,
} }
} else { } else {
fontStr = (*env)->NewString(env, name, (jsize)wcslen(name)); fontStr = (*env)->NewString(env, name, (jsize)wcslen(name));
if (fontStr == NULL) {
(*env)->ExceptionClear(env);
return;
}
fontStr = (*env)->CallObjectMethod(env, fontStr, fontStr = (*env)->CallObjectMethod(env, fontStr,
fmi->toLowerCaseMID, fmi->locale); fmi->toLowerCaseMID, fmi->locale);
(*env)->CallObjectMethod(env, fontToFileMap, fmi->putMID, (*env)->CallObjectMethod(env, fontToFileMap, fmi->putMID,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册