{"record":{"id":"250e4298f6697fe6","repo":"pxb1988/dex2jar","slug":"can-t-read-line","errorCode":null,"errorMessage":"Can't read line:","messagePattern":"Can't read line:","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"dex-tools/src/main/java/com/googlecode/dex2jar/tools/DecryptStringCmd.java","lineNumber":127,"sourceCode":"                return false;\n            if (name == null) {\n                if (other.name != null)\n                    return false;\n            } else if (!name.equals(other.name))\n                return false;\n            if (owner == null) {\n                if (other.owner != null)\n                    return false;\n            } else if (!owner.equals(other.owner))\n                return false;\n            return true;\n        }\n    }\n\n    MethodConfig build(String line) {\n        int idx = line.indexOf(\"->\");\n        if (idx < 0) {\n            throw new RuntimeException(\"Can't read line:\" + line);\n        }\n        String owner = line.substring(0, idx);\n\n        if (owner.startsWith(\"L\") && owner.endsWith(\";\")) {\n            owner = owner.substring(1, owner.length() - 1);\n        }\n\n        int idx2 = line.indexOf('(', idx);\n        if (idx2 < 0) {\n            throw new RuntimeException(\"Can't read line:\" + line);\n        }\n\n        String name = line.substring(idx + 2, idx2);\n\n        String desc = line.substring(idx2);\n        if (desc.endsWith(\")\")) {\n            desc = desc + \"Ljava/lang/String;\";\n        }","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/pxb1988/dex2jar/blob/b5bda4fb4935ae8b3869b422454ae3b3896c7bc1/dex-tools/src/main/java/com/googlecode/dex2jar/tools/DecryptStringCmd.java#L109-L145","documentation":"DecryptStringCmd.build() parses config lines of the form `Lowner;->name(desc)ret`. If the line contains no `->` separator it cannot be parsed as a method reference, so it throws this RuntimeException.","triggerScenarios":"A config line (from -c/--config file or built from -t/--arg-types input) missing the `->` separator, e.g. a blank-ish, commented, or free-form line fed to the config parser.","commonSituations":"Malformed lines in a method-config file (trailing comments, using `.` instead of `->`, blank lines with stray characters).","solutions":["Fix the offending line to use the `owner->name(descriptor)ReturnType` format","Strip comments/blank lines from the config file before passing it","Example valid line: Lcom/foo/Bar;->decrypt(Ljava/lang/String;)Ljava/lang/String;"],"exampleFix":"// before\ncom.foo.Bar.decrypt(java.lang.String)\n// after\nLcom/foo/Bar;->decrypt(Ljava/lang/String;)Ljava/lang/String;","handlingStrategy":"validation","validationCode":"boolean validLine = line.contains(\"->\") && line.indexOf('(', line.indexOf(\"->\")) > 0;\nif (!validLine) skipOrLog(line);","typeGuard":null,"tryCatchPattern":"try { MethodConfig c = build(line); } catch (RuntimeException e) { if (e.getMessage().startsWith(\"Can't read line:\")) { log.warn(\"Skipping malformed config line: \" + line); } else throw e; }","preventionTips":["Always format config lines as Lowner;->name(desc)Ret","Strip comments and blank lines from config files","Lint config files with a regex like `L[^;]+;->[^ (]+\\(` before running"],"tags":["parsing","config","method-reference"],"backgroundTag":"invalid-argument-format","analyzedSha":"b5bda4fb4935ae8b3869b422454ae3b3896c7bc1","analyzedAt":"2026-09-08T00:44:01.258Z","contentChangedAt":"2026-09-08T00:44:01.258Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}