{"record":{"id":"8788d9c5b2e2a301","repo":"MuntashirAkon/AppManager","slug":"invalid-format-ishidden-not-found-magiskhiderule","errorCode":null,"errorMessage":"Invalid format: isHidden not found","messagePattern":"Invalid format: isHidden not found","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"app/src/main/java/io/github/muntashirakon/AppManager/rules/struct/MagiskHideRule.java","lineNumber":29,"sourceCode":"import io.github.muntashirakon.AppManager.rules.RuleType;\n\npublic class MagiskHideRule extends RuleEntry {\n    @NonNull\n    private final MagiskProcess mMagiskProcess;\n\n    public MagiskHideRule(@NonNull MagiskProcess magiskProcess) {\n        super(magiskProcess.packageName, magiskProcess.name, RuleType.MAGISK_HIDE);\n        mMagiskProcess = magiskProcess;\n    }\n\n    public MagiskHideRule(@NonNull String packageName, @NonNull String processName, @NonNull StringTokenizer tokenizer)\n            throws IllegalArgumentException {\n        super(packageName, processName.equals(STUB) ? packageName : processName, RuleType.MAGISK_HIDE);\n        mMagiskProcess = new MagiskProcess(packageName, name); // name cannot be STUB\n        mMagiskProcess.setAppZygote(name.endsWith(\"_zygote\"));\n        if (tokenizer.hasMoreElements()) {\n            mMagiskProcess.setEnabled(Boolean.parseBoolean(tokenizer.nextElement().toString()));\n        } else throw new IllegalArgumentException(\"Invalid format: isHidden not found\");\n        if (tokenizer.hasMoreElements()) {\n            mMagiskProcess.setIsolatedProcess(Boolean.parseBoolean(tokenizer.nextElement().toString()));\n        }\n    }\n\n    @NonNull\n    public MagiskProcess getMagiskProcess() {\n        return mMagiskProcess;\n    }\n\n    @NonNull\n    @Override\n    public String toString() {\n        return \"MagiskHideRule{\" +\n                \"packageName='\" + packageName + '\\'' +\n                \"processName='\" + name + '\\'' +\n                \", isHidden=\" + mMagiskProcess.isEnabled() +\n                \", isIsolated=\" + mMagiskProcess.isIsolatedProcess() +","sourceCodeStart":11,"sourceCodeEnd":47,"githubUrl":"https://github.com/MuntashirAkon/AppManager/blob/0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5/app/src/main/java/io/github/muntashirakon/AppManager/rules/struct/MagiskHideRule.java#L11-L47","documentation":"MagiskHideRule's constructor parses the isHidden (enabled) boolean from the flattened rule string. When the StringTokenizer is exhausted before that token, it throws this IllegalArgumentException, since a MAGISK_HIDE rule requires the isHidden field.","triggerScenarios":"new MagiskHideRule(packageName, processName, tokenizer) called with fewer than the required tokens remaining, i.e. the string ends after the package/process name parts.","commonSituations":"Legacy Magisk Hide rule files missing newer fields, manually edited rules files, or split() producing fewer tokens than expected due to delimiter mismatches.","solutions":["Add the boolean isHidden token to the flattened MAGISK_HIDE rule string","Validate the expected token count before parsing","Re-export rules with the current AppManager version for the correct format","Wrap parsing in try-catch and skip malformed lines on import"],"exampleFix":"// before\nnew MagiskHideRule(pkg, proc, new StringTokenizer(\"com.example\\tcom.example\")); // throws\n// after\nnew MagiskHideRule(pkg, proc, new StringTokenizer(\"com.example\\tcom.example\\ttrue\\tfalse\"));","handlingStrategy":"try-catch","validationCode":"String[] p = line.split(\"\\t\");\nif (p.length < 3) throw new IllegalArgumentException(\"MAGISK_HIDE rule needs isHidden\");\nBoolean.parseBoolean(p[2]);","typeGuard":"boolean isParsableHideRule(String line) { String[] p = line.split(\"\\t\"); return p.length >= 3 && (p[2].equals(\"true\") || p[2].equals(\"false\")); }","tryCatchPattern":"try { new MagiskHideRule(pkg, proc, tokenizer); } catch (IllegalArgumentException e) { reportInvalid(line); }","preventionTips":["Validate boolean fields are literal true/false before parsing","Handle legacy formats that predate newer fields by detecting token count","Log the raw line on failure so users can fix their rules file"],"tags":["rules-parsing","magisk","illegal-argument"],"backgroundTag":"invalid-argument-format","analyzedSha":"0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5","analyzedAt":"2026-09-12T14:03:37.243Z","contentChangedAt":"2026-09-12T14:03:37.243Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}