{"record":{"id":"2ed298b28d19148a","repo":"skylot/jadx","slug":"unknown-type-char-0x","errorCode":null,"errorMessage":"Unknown type char: '{}' (0x{})","messagePattern":"Unknown type char: '(.+?)' \\(0x(.+?)\\)","errorType":"exception","errorClass":"JadxRuntimeException","httpStatus":null,"severity":"error","filePath":"jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java","lineNumber":784,"sourceCode":"\t\t\tcase 'B':\n\t\t\t\treturn BYTE;\n\t\t\tcase 'C':\n\t\t\t\treturn CHAR;\n\t\t\tcase 'S':\n\t\t\t\treturn SHORT;\n\t\t\tcase 'I':\n\t\t\t\treturn INT;\n\t\t\tcase 'J':\n\t\t\t\treturn LONG;\n\t\t\tcase 'F':\n\t\t\t\treturn FLOAT;\n\t\t\tcase 'D':\n\t\t\t\treturn DOUBLE;\n\t\t\tcase 'V':\n\t\t\t\treturn VOID;\n\n\t\t\tdefault:\n\t\t\t\tthrow new JadxRuntimeException(\"Unknown type char: '\" + f + \"' (0x\" + Integer.toHexString(f) + ')');\n\t\t}\n\t}\n\n\tpublic int getRegCount() {\n\t\tif (isPrimitive()) {\n\t\t\tPrimitiveType type = getPrimitiveType();\n\t\t\tif (type == PrimitiveType.LONG || type == PrimitiveType.DOUBLE) {\n\t\t\t\treturn 2;\n\t\t\t} else {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t}\n\t\tif (!isTypeKnown()) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn 1;\n\t}\n","sourceCodeStart":766,"sourceCodeEnd":802,"githubUrl":"https://github.com/skylot/jadx/blob/e738a26571d02919f01df40de93bc9a44dee4e18/jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java#L766-L802","documentation":"ArgType.parse(char): the single character is not one of the recognized primitive descriptors (Z B C S I J F D V). This is the final fallback for an unknown primitive type code.","triggerScenarios":"A type descriptor character outside the JVM primitive set, e.g. 'A', 'X', 'N', or a control character from corrupt data.","commonSituations":"Corrupt DEX type strings, a packer that mutates descriptor bytes, or an input from an unsupported/prototype DEX format.","solutions":["Upgrade JADX.","Inspect the raw byte value shown in the message (0xNN) to identify the corrupt character.","Validate DEX type tables with dexdump.","Re-extract the APK and report upstream."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Pre-check that every single-char type descriptor is a known primitive.\nstatic final String VALID_PRIMS = \"ZBCSIJFDV\";\nstatic boolean validPrimChar(char c) { return VALID_PRIMS.indexOf(c) >= 0; }","typeGuard":null,"tryCatchPattern":"try {\n    jadx.load();\n} catch (JadxRuntimeException e) {\n    if (e.getMessage().contains(\"Unknown type char\")) {\n        log.warn(\"Unknown primitive type descriptor char; corrupt DEX\", e);\n    } else throw e;\n}","preventionTips":["Validate single-char type descriptors against the JVM primitive set.","Use the hex value in the message to diagnose the corrupt byte.","Keep JADX updated."],"tags":["argtype","type-descriptor","malformed-input"],"backgroundTag":null,"analyzedSha":"e738a26571d02919f01df40de93bc9a44dee4e18","analyzedAt":"2026-08-14T00:10:24.238Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}