Skip to content

Commit

Permalink
Merge pull request #16100 from ehrenjulzert/j19_err_fix
Browse files Browse the repository at this point in the history
Convert last slash in hidden/anonymous class signatures to period
  • Loading branch information
tajila committed Oct 21, 2022
2 parents b3fef84 + 3a22916 commit 1af0a29
Showing 1 changed file with 23 additions and 0 deletions.
23 changes: 23 additions & 0 deletions runtime/jvmti/jvmtiClass.c
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,21 @@ jvmtiGetClassLoaderClasses(jvmtiEnv* env,
}


void fixHiddenOrAnonSignature(char* signature, UDATA signatureLength) {
if (signatureLength >= (ROM_ADDRESS_LENGTH + 2)) {
IDATA lastSeparatorIndex = signatureLength - (ROM_ADDRESS_LENGTH + 2);

/* hidden/anon class names are generated from ROMClassBuilder::handleAnonClassName() and have 0x<romaddress> appended at the end */
if ((ANON_CLASSNAME_CHARACTER_SEPARATOR == signature[lastSeparatorIndex])
&& ('0' == signature[lastSeparatorIndex+1])
&& ('x' == signature[lastSeparatorIndex+2])
) {
signature[lastSeparatorIndex] = '.';
}
}
}


jvmtiError JNICALL
jvmtiGetClassSignature(jvmtiEnv* env,
jclass klass,
Expand Down Expand Up @@ -366,6 +381,10 @@ jvmtiGetClassSignature(jvmtiEnv* env,
signature[arity] = 'L';
memcpy(signature + arity + 1, J9UTF8_DATA(utf), utfLength);
signature[allocSize - 1] = ';';

if (J9ROMCLASS_IS_ANON_OR_HIDDEN(leafType->romClass)) {
fixHiddenOrAnonSignature(signature, allocSize);
}
}
signature[allocSize] = '\0';
} else {
Expand All @@ -381,6 +400,10 @@ jvmtiGetClassSignature(jvmtiEnv* env,
memcpy(signature + 1, J9UTF8_DATA(utf), utfLength);
signature[utfLength + 1] = ';';
signature[utfLength + 2] = '\0';

if (J9ROMCLASS_IS_ANON_OR_HIDDEN(clazz->romClass)) {
fixHiddenOrAnonSignature(signature, utfLength + 2);
}
}
}

Expand Down

0 comments on commit 1af0a29

Please sign in to comment.