hotspot/test/runtime/jni/8025979/libUninitializedStrings.c
author stsmirno
Thu, 14 May 2015 10:12:51 -0700
changeset 30748 653bc416d9ae
permissions -rw-r--r--
8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code Reviewed-by: ctornqvi, dsimms
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30748
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
     1
/*
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
     2
 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
     4
 *
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
     7
 * published by the Free Software Foundation.
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
     8
 *
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    13
 * accompanied this code).
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    14
 *
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    18
 *
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    21
 * questions.
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    22
 */
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    23
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    24
#include "jni.h"
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    25
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    26
//Method to verify expression and throw java/lang/Exception if it is FALSE
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    27
void Assert(JNIEnv *jni_env, jint expr, const char* message) {
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    28
    if(expr == 0){ //if expr is false
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    29
        (*jni_env)->FatalError(jni_env, message);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    30
    }
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    31
}
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    32
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    33
//Method to allocate a java/lang/String object and return jstring as a result
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    34
jstring AllocateString(JNIEnv *jni_env) {
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    35
    jclass classString = NULL;
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    36
    jstring allocatedString = NULL;
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    37
    classString = (*jni_env)->FindClass(jni_env, "java/lang/String");
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    38
    //NULL check
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    39
    Assert(jni_env, (classString != NULL), "class String not found");
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    40
    //allocate object of type java/lang/String
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    41
    allocatedString = (jstring) (*jni_env)->AllocObject(jni_env, classString);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    42
    //NULL check
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    43
    Assert(jni_env, (allocatedString != NULL), "allocated string is NULL");
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    44
    return allocatedString;
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    45
}
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    46
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    47
//GetStringLength test
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    48
JNIEXPORT void JNICALL Java_UninitializedStrings_lengthTest
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    49
(JNIEnv *jni_env, jclass cl) {
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    50
    jint stringLength = 0;
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    51
    jstring allocatedString = NULL;
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    52
    //allocate object of type java/lang/String
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    53
    allocatedString = AllocateString(jni_env);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    54
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    55
    stringLength = (*jni_env)->GetStringLength(jni_env, allocatedString);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    56
    Assert(jni_env, (stringLength == 0), "string length must be 0");
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    57
}
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    58
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    59
//GetStringChars test
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    60
JNIEXPORT void JNICALL Java_UninitializedStrings_charsTest
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    61
(JNIEnv *jni_env, jclass cl) {
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    62
    jint compareRes = 0;
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    63
    const jchar* stringChars = NULL;
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    64
    jstring allocatedString = NULL;
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    65
    //allocate object of type java/lang/String
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    66
    allocatedString = AllocateString(jni_env);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    67
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    68
    stringChars = (*jni_env)->GetStringChars(jni_env, allocatedString, NULL);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    69
    compareRes = (stringChars == NULL);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    70
    //release stringChars pointer
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    71
    (*jni_env)->ReleaseStringChars(jni_env, allocatedString, stringChars);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    72
    Assert(jni_env, compareRes, "string chars must be NULL");
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    73
}
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    74
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    75
//GetStringUTFLength test
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    76
JNIEXPORT void JNICALL Java_UninitializedStrings_utfLengthTest
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    77
(JNIEnv *jni_env, jclass cl) {
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    78
    jint stringLength = 0;
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    79
    jstring allocatedString = NULL;
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    80
    //allocate object of type java/lang/String
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    81
    allocatedString = AllocateString(jni_env);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    82
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    83
    stringLength = (*jni_env)->GetStringUTFLength(jni_env, allocatedString);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    84
    Assert(jni_env, (stringLength == 0), "string utf length must be 0");
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    85
}
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    86
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    87
//GetStringUTFChars test
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    88
JNIEXPORT void JNICALL Java_UninitializedStrings_utfCharsTest
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    89
(JNIEnv *jni_env, jclass cl) {
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    90
    jint compareRes = 0;
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    91
    const char* stringUtfChars = NULL;
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    92
    jstring allocatedString = NULL;
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    93
    //allocate object of type java/lang/String
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    94
    allocatedString = AllocateString(jni_env);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    95
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    96
    stringUtfChars = (*jni_env)->GetStringUTFChars(jni_env, allocatedString, NULL);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    97
    compareRes = (stringUtfChars == NULL);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    98
    //release stringUtfChars pointer
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
    99
    (*jni_env)->ReleaseStringUTFChars(jni_env, allocatedString, stringUtfChars);
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
   100
    Assert(jni_env, compareRes, "string utf chars must be NULL");
653bc416d9ae 8025979: [TESTBUG] Write test to exercise uninitialized strings from JNI code
stsmirno
parents:
diff changeset
   101
}