--- old/src/windows/native/java/lang/ProcessEnvironment_md.c Sat May 31 17:16:56 2014 +++ new/src/windows/native/java/lang/ProcessEnvironment_md.c Sat May 31 17:16:56 2014 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014 Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,10 +32,17 @@ environmentBlock9x(JNIEnv *env) { int i; - jmethodID String_init_ID = - (*env)->GetMethodID(env, JNU_ClassString(env), "", "([B)V"); + jmethodID String_init_ID; jbyteArray bytes; - jbyte *blockA = (jbyte *) GetEnvironmentStringsA(); + jbyte *blockA; + jclass string_class; + + string_class= JNU_ClassString(env); + CHECK_NULL_RETURN(string_class, NULL); + String_init_ID = + (*env)->GetMethodID(env, string_class, "", "([B)V"); + CHECK_NULL_RETURN(String_init_ID); + blockA = (jbyte *) GetEnvironmentStringsA(); if (blockA == NULL) { /* Both GetEnvironmentStringsW and GetEnvironmentStringsA * failed. Out of memory is our best guess. */ @@ -49,10 +56,13 @@ while (blockA[i++]) ; - if ((bytes = (*env)->NewByteArray(env, i)) == NULL) return NULL; + if ((bytes = (*env)->NewByteArray(env, i)) == NULL) { + FreeEnvironmentStringsA(blockA); + return NULL; + } (*env)->SetByteArrayRegion(env, bytes, 0, i, blockA); FreeEnvironmentStringsA(blockA); - return (*env)->NewObject(env, JNU_ClassString(env), + return (*env)->NewObject(env, string_class, String_init_ID, bytes); }