{"record":{"id":"0b0d6a42260685c9","repo":"pinpoint-apm/pinpoint","slug":"invalid-signature-objectname-not-found","errorCode":null,"errorMessage":"invalid signature. objectName not found :","messagePattern":"invalid signature\\. objectName not found :","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"warning","filePath":"agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/util/JavaAssistUtils.java","lineNumber":357,"sourceCode":"        for (int i = 0; i < arraySize; i++) {\n            sb.append(ARRAY);\n        }\n        return sb.toString();\n    }\n\n    private static int getArraySize(String description) {\n        if (StringUtils.isEmpty(description)) {\n            return 0;\n        }\n        return StringMatchUtils.startsWithCountMatches(description, '[');\n    }\n\n    private static String toObjectType(String signature, int startIndex) {\n        // Ljava/lang/String;\n        final String assistClass = signature.substring(startIndex, signature.length() - 1);\n        final String objectName = jvmNameToJavaName(assistClass);\n        if (objectName.isEmpty()) {\n            throw new IllegalArgumentException(\"invalid signature. objectName not found :\" + signature);\n        }\n        return objectName;\n    }\n\n\n    private static List<String> splitParameterSignature(String signature) {\n        final String parameterSignature = getParameterSignature(signature);\n        if (parameterSignature.isEmpty()) {\n            return Collections.emptyList();\n        }\n        final Matcher matcher = PARAMETER_SIGNATURE_PATTERN.matcher(parameterSignature);\n        final List<String> parameterTypeList = new ArrayList<>();\n        while (matcher.find()) {\n            parameterTypeList.add(matcher.group());\n        }\n        return parameterTypeList;\n    }\n","sourceCodeStart":339,"sourceCodeEnd":375,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/util/JavaAssistUtils.java#L339-L375","documentation":"toObjectType extracts the class part of an 'L...;' object signature (e.g. Ljava/lang/String; -> java/lang/String) and converts it to a Java name. If the extracted segment is empty after conversion, the object signature has no class name and IllegalArgumentException is thrown.","triggerScenarios":"Parsing a descriptor like 'L;' or a signature where substring(startIndex, length-1) is empty, typically a malformed/truncated 'L...;' segment.","commonSituations":"Truncated descriptors from faulty signature generators; slicing errors by callers passing a wrong startIndex; empty class segments in stored API metadata.","solutions":["Verify the signature segment between 'L' and ';' is non-empty before parsing","Check the startIndex passed to byteCodeSignatureToObjectType/toObjectType is at the 'L' character","Regenerate or fix the corrupted descriptor at its source"],"exampleFix":"// before\nString sig = \"L;\"; // malformed, empty object name -> throws\n// after\nString sig = \"Ljava/lang/String;\"; // valid object signature","handlingStrategy":"validation","validationCode":"if (signature == null || !signature.startsWith(\"L\") || !signature.endsWith(\";\") || signature.length() <= 2) { throw new IllegalArgumentException(\"bad object signature: \" + signature); }","typeGuard":null,"tryCatchPattern":"try { type = JavaAssistUtils.objectType(sig); } catch (IllegalArgumentException e) { logger.warn(\"Empty object name in signature {}\", sig); type = Object.class.getName(); }","preventionTips":["Check the 'L...;' segment is non-empty before parsing","Verify startIndex points at the 'L' character in callers","Regenerate corrupted descriptors at the source"],"tags":["java","jvm-signature","parsing"],"backgroundTag":"invalid-argument-format","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}