--- a/jdk/src/windows/native/sun/util/locale/provider/HostLocaleProviderAdapter_md.c Thu Feb 06 11:01:27 2014 -0500
+++ b/jdk/src/windows/native/sun/util/locale/provider/HostLocaleProviderAdapter_md.c Thu Feb 06 10:06:09 2014 -0800
@@ -24,6 +24,7 @@
*/
#include "sun_util_locale_provider_HostLocaleProviderAdapterImpl.h"
+#include "jni_util.h"
#include <windows.h>
#include <gdefs.h>
#include <stdlib.h>
@@ -197,8 +198,13 @@
}
localeString = (char *)getJavaIDFromLangID(langid);
- ret = (*env)->NewStringUTF(env, localeString);
- free(localeString);
+ if (localeString != NULL) {
+ ret = (*env)->NewStringUTF(env, localeString);
+ free(localeString);
+ } else {
+ JNU_ThrowOutOfMemoryError(env, "memory allocation error");
+ ret = NULL;
+ }
return ret;
}
@@ -211,6 +217,7 @@
(JNIEnv *env, jclass cls, jint dateStyle, jint timeStyle, jstring jlangtag) {
WCHAR pattern[BUFLEN];
const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
+ CHECK_NULL_RETURN(langtag, NULL);
pattern[0] = L'\0';
@@ -238,8 +245,11 @@
*/
JNIEXPORT jint JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getCalendarID
(JNIEnv *env, jclass cls, jstring jlangtag) {
- const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- jint ret = getCalendarID(langtag);
+ const jchar *langtag;
+ jint ret;
+ langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
+ CHECK_NULL_RETURN(langtag, 0);
+ ret = getCalendarID(langtag);
(*env)->ReleaseStringChars(env, jlangtag, langtag);
return ret;
}
@@ -252,10 +262,13 @@
JNIEXPORT jobjectArray JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getAmPmStrings
(JNIEnv *env, jclass cls, jstring jlangtag, jobjectArray ampms) {
WCHAR buf[BUFLEN];
- const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
+ const jchar *langtag;
// AM
- int got = getLocaleInfoWrapper(langtag, LOCALE_S1159, buf, BUFLEN);
+ int got;
+ langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
+ CHECK_NULL_RETURN(langtag, NULL);
+ got = getLocaleInfoWrapper(langtag, LOCALE_S1159, buf, BUFLEN);
if (got) {
(*env)->SetObjectArrayElement(env, ampms, 0, (*env)->NewString(env, buf, wcslen(buf)));
}
@@ -280,6 +293,7 @@
(JNIEnv *env, jclass cls, jstring jlangtag, jobjectArray eras) {
WCHAR ad[BUFLEN];
const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
+ CHECK_NULL_RETURN(langtag, eras);
getCalendarInfoWrapper(langtag, getCalendarID(langtag), NULL,
CAL_SERASTRING, ad, BUFLEN, NULL);
@@ -347,10 +361,14 @@
*/
JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getNumberPattern
(JNIEnv *env, jclass cls, jint numberStyle, jstring jlangtag) {
- const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
+ const jchar *langtag;
jstring ret;
+ WCHAR * pattern;
- WCHAR * pattern = getNumberPattern(langtag, numberStyle);
+ langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
+ CHECK_NULL_RETURN(langtag, NULL);
+ pattern = getNumberPattern(langtag, numberStyle);
+ CHECK_NULL_RETURN(pattern, NULL);
(*env)->ReleaseStringChars(env, jlangtag, langtag);
ret = (*env)->NewString(env, pattern, wcslen(pattern));
@@ -367,8 +385,10 @@
JNIEXPORT jboolean JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_isNativeDigit
(JNIEnv *env, jclass cls, jstring jlangtag) {
DWORD num;
+ int got;
const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- int got = getLocaleInfoWrapper(langtag,
+ CHECK_NULL_RETURN(langtag, JNI_FALSE);
+ got = getLocaleInfoWrapper(langtag,
LOCALE_IDIGITSUBSTITUTION | LOCALE_RETURN_NUMBER,
(LPWSTR)&num, sizeof(num));
(*env)->ReleaseStringChars(env, jlangtag, langtag);
@@ -384,8 +404,10 @@
JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getCurrencySymbol
(JNIEnv *env, jclass cls, jstring jlangtag, jstring currencySymbol) {
WCHAR buf[BUFLEN];
+ int got;
const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- int got = getLocaleInfoWrapper(langtag, LOCALE_SCURRENCY, buf, BUFLEN);
+ CHECK_NULL_RETURN(langtag, currencySymbol);
+ got = getLocaleInfoWrapper(langtag, LOCALE_SCURRENCY, buf, BUFLEN);
(*env)->ReleaseStringChars(env, jlangtag, langtag);
if (got) {
@@ -403,8 +425,10 @@
JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getDecimalSeparator
(JNIEnv *env, jclass cls, jstring jlangtag, jchar decimalSeparator) {
WCHAR buf[BUFLEN];
+ int got;
const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- int got = getLocaleInfoWrapper(langtag, LOCALE_SDECIMAL, buf, BUFLEN);
+ CHECK_NULL_RETURN(langtag, decimalSeparator);
+ got = getLocaleInfoWrapper(langtag, LOCALE_SDECIMAL, buf, BUFLEN);
(*env)->ReleaseStringChars(env, jlangtag, langtag);
if (got) {
@@ -422,8 +446,10 @@
JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getGroupingSeparator
(JNIEnv *env, jclass cls, jstring jlangtag, jchar groupingSeparator) {
WCHAR buf[BUFLEN];
+ int got;
const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- int got = getLocaleInfoWrapper(langtag, LOCALE_STHOUSAND, buf, BUFLEN);
+ CHECK_NULL_RETURN(langtag, groupingSeparator);
+ got = getLocaleInfoWrapper(langtag, LOCALE_STHOUSAND, buf, BUFLEN);
(*env)->ReleaseStringChars(env, jlangtag, langtag);
if (got) {
@@ -441,8 +467,10 @@
JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getInfinity
(JNIEnv *env, jclass cls, jstring jlangtag, jstring infinity) {
WCHAR buf[BUFLEN];
+ int got;
const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- int got = getLocaleInfoWrapper(langtag, LOCALE_SPOSINFINITY, buf, BUFLEN);
+ CHECK_NULL_RETURN(langtag, infinity);
+ got = getLocaleInfoWrapper(langtag, LOCALE_SPOSINFINITY, buf, BUFLEN);
(*env)->ReleaseStringChars(env, jlangtag, langtag);
if (got) {
@@ -460,8 +488,10 @@
JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getInternationalCurrencySymbol
(JNIEnv *env, jclass cls, jstring jlangtag, jstring internationalCurrencySymbol) {
WCHAR buf[BUFLEN];
+ int got;
const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- int got = getLocaleInfoWrapper(langtag, LOCALE_SINTLSYMBOL, buf, BUFLEN);
+ CHECK_NULL_RETURN(langtag, internationalCurrencySymbol);
+ got = getLocaleInfoWrapper(langtag, LOCALE_SINTLSYMBOL, buf, BUFLEN);
(*env)->ReleaseStringChars(env, jlangtag, langtag);
if (got) {
@@ -479,8 +509,10 @@
JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getMinusSign
(JNIEnv *env, jclass cls, jstring jlangtag, jchar minusSign) {
WCHAR buf[BUFLEN];
+ int got;
const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- int got = getLocaleInfoWrapper(langtag, LOCALE_SNEGATIVESIGN, buf, BUFLEN);
+ CHECK_NULL_RETURN(langtag, minusSign);
+ got = getLocaleInfoWrapper(langtag, LOCALE_SNEGATIVESIGN, buf, BUFLEN);
(*env)->ReleaseStringChars(env, jlangtag, langtag);
if (got) {
@@ -498,8 +530,10 @@
JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getMonetaryDecimalSeparator
(JNIEnv *env, jclass cls, jstring jlangtag, jchar monetaryDecimalSeparator) {
WCHAR buf[BUFLEN];
+ int got;
const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- int got = getLocaleInfoWrapper(langtag, LOCALE_SMONDECIMALSEP, buf, BUFLEN);
+ CHECK_NULL_RETURN(langtag, monetaryDecimalSeparator);
+ got = getLocaleInfoWrapper(langtag, LOCALE_SMONDECIMALSEP, buf, BUFLEN);
(*env)->ReleaseStringChars(env, jlangtag, langtag);
if (got) {
@@ -517,8 +551,10 @@
JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getNaN
(JNIEnv *env, jclass cls, jstring jlangtag, jstring nan) {
WCHAR buf[BUFLEN];
+ int got;
const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- int got = getLocaleInfoWrapper(langtag, LOCALE_SNAN, buf, BUFLEN);
+ CHECK_NULL_RETURN(langtag, nan);
+ got = getLocaleInfoWrapper(langtag, LOCALE_SNAN, buf, BUFLEN);
(*env)->ReleaseStringChars(env, jlangtag, langtag);
if (got) {
@@ -536,8 +572,10 @@
JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getPercent
(JNIEnv *env, jclass cls, jstring jlangtag, jchar percent) {
WCHAR buf[BUFLEN];
+ int got;
const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- int got = getLocaleInfoWrapper(langtag, LOCALE_SPERCENT, buf, BUFLEN);
+ CHECK_NULL_RETURN(langtag, percent);
+ got = getLocaleInfoWrapper(langtag, LOCALE_SPERCENT, buf, BUFLEN);
(*env)->ReleaseStringChars(env, jlangtag, langtag);
if (got) {
@@ -555,8 +593,12 @@
JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getPerMill
(JNIEnv *env, jclass cls, jstring jlangtag, jchar perMill) {
WCHAR buf[BUFLEN];
- const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- int got = getLocaleInfoWrapper(langtag, LOCALE_SPERMILLE, buf, BUFLEN);
+ const jchar *langtag;
+ int got;
+ langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
+ CHECK_NULL_RETURN(langtag, perMill);
+ got = getLocaleInfoWrapper(langtag, LOCALE_SPERMILLE, buf, BUFLEN);
+
(*env)->ReleaseStringChars(env, jlangtag, langtag);
if (got) {
@@ -574,8 +616,12 @@
JNIEXPORT jchar JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getZeroDigit
(JNIEnv *env, jclass cls, jstring jlangtag, jchar zeroDigit) {
WCHAR buf[BUFLEN];
- const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- int got = getLocaleInfoWrapper(langtag, LOCALE_SNATIVEDIGITS, buf, BUFLEN);
+ const jchar *langtag;
+ int got;
+ langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
+ CHECK_NULL_RETURN(langtag, zeroDigit);
+ got = getLocaleInfoWrapper(langtag, LOCALE_SNATIVEDIGITS, buf, BUFLEN);
+
(*env)->ReleaseStringChars(env, jlangtag, langtag);
if (got) {
@@ -593,9 +639,11 @@
JNIEXPORT jint JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getCalendarDataValue
(JNIEnv *env, jclass cls, jstring jlangtag, jint type) {
DWORD num;
- const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
+ const jchar *langtag;
int got = 0;
+ langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
+ CHECK_NULL_RETURN(langtag, -1);
switch (type) {
case sun_util_locale_provider_HostLocaleProviderAdapterImpl_CD_FIRSTDAYOFWEEK:
got = getLocaleInfoWrapper(langtag,
@@ -648,6 +696,7 @@
}
pjChar = (*env)->GetStringChars(env, jStr, JNI_FALSE);
+ CHECK_NULL_RETURN(pjChar, NULL);
got = getLocaleInfoWrapper(pjChar, lcType, buf, BUFLEN);
(*env)->ReleaseStringChars(env, jStr, pjChar);
@@ -705,8 +754,11 @@
void replaceCalendarArrayElems(JNIEnv *env, jstring jlangtag, jobjectArray jarray, CALTYPE* pCalTypes, int offset, int length) {
WCHAR name[BUFLEN];
- const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
- int calid = getCalendarID(langtag);
+ const jchar *langtag;
+ int calid;
+ langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
+ CHECK_NULL(langtag);
+ calid = getCalendarID(langtag);
if (calid != -1) {
int i;