< prev index next >

test/hotspot/jtreg/vmTestbase/vm/mlvm/share/mlvmJvmtiUtils.cpp

Print this page

        

@@ -46,33 +46,41 @@
 
     pEnv->ReleaseStringUTFChars(src, pStr);
 }
 
 struct MethodName * getMethodName(jvmtiEnv * pJvmtiEnv, jmethodID method) {
-    char * szName;
-    char * szSignature;
+    char * szName = NULL;
+    char * szSignature = NULL;
     jclass clazz;
-    struct MethodName * mn;
+    struct MethodName * mn = NULL;
 
     if (!NSK_JVMTI_VERIFY(pJvmtiEnv->GetMethodName(method, &szName, NULL, NULL))) {
-        return NULL;
+        goto out;
     }
 
     if (!NSK_JVMTI_VERIFY(pJvmtiEnv->GetMethodDeclaringClass(method, &clazz))) {
-        NSK_JVMTI_VERIFY(pJvmtiEnv->Deallocate((unsigned char*) szName));
-        return NULL;
+        goto out;
     }
 
     if (!NSK_JVMTI_VERIFY(pJvmtiEnv->GetClassSignature(clazz, &szSignature, NULL))) {
-        NSK_JVMTI_VERIFY(pJvmtiEnv->Deallocate((unsigned char*) szName));
-        return NULL;
+        goto out;
+    }
+
+    if (strlen(szName) + 1 > sizeof(mn->methodName) ||
+        strlen(szSignature) + 1 > sizeof(mn->classSig)) {
+        goto out;
     }
 
     mn = (MethodName*) malloc(sizeof(MethodNameStruct));
+    if (mn == NULL) {
+        goto out;
+    }
+
     strncpy(mn->methodName, szName, sizeof(mn->methodName));
     strncpy(mn->classSig, szSignature, sizeof(mn->classSig));
 
+ out:
     NSK_JVMTI_VERIFY(pJvmtiEnv->Deallocate((unsigned char*) szName));
     NSK_JVMTI_VERIFY(pJvmtiEnv->Deallocate((unsigned char*) szSignature));
     return mn;
 }
 
< prev index next >