{"record":{"id":"709818e93cc8948d","repo":"MuntashirAkon/AppManager","slug":"invalid-adb-port-port","errorCode":null,"errorMessage":"Invalid ADB port: ${port}","messagePattern":"Invalid ADB port: (.+?)","errorType":"validation","errorClass":"java.lang.IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"app/src/main/java/io/github/muntashirakon/AppManager/servermanager/ServerConfig.java","lineNumber":145,"sourceCode":"\n    @AnyThread\n    public static boolean getAllowBgRunning() {\n        return sPreferences.getBoolean(\"allow_bg_running\", true);\n    }\n\n    @AnyThread\n    @IntRange(from = 1, to = 65535)\n    @NoOps\n    public static int getAdbPort() {\n        int port = sPreferences.getInt(\"adb_port\", DEFAULT_ADB_PORT);\n        return isValidAdbPort(port) ? port : DEFAULT_ADB_PORT;\n    }\n\n    @AnyThread\n    @NoOps\n    public static void setAdbPort(@IntRange(from = 1, to = 65535) int port) {\n        if (!isValidAdbPort(port)) {\n            throw new IllegalArgumentException(\"Invalid ADB port: \" + port);\n        }\n        sPreferences.edit().putInt(\"adb_port\", port).apply();\n    }\n\n    public static boolean isValidAdbPort(int port) {\n        return port >= 1 && port <= 65535;\n    }\n\n    @AnyThread\n    public static int getLocalServerPort() {\n        return Prefs.Misc.getAdbLocalServerPort();\n    }\n\n    @WorkerThread\n    @NonNull\n    public static String getAdbHost(Context context) {\n        return getHostIpAddress(context);\n    }","sourceCodeStart":127,"sourceCodeEnd":163,"githubUrl":"https://github.com/MuntashirAkon/AppManager/blob/0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5/app/src/main/java/io/github/muntashirakon/AppManager/servermanager/ServerConfig.java#L127-L163","documentation":"setAdbPort persists the local ADB daemon port in preferences, but only after validating it is within 1–65535 via isValidAdbPort. Values outside the valid TCP port range throw IllegalArgumentException before anything is stored.","triggerScenarios":"Calling Ops.setAdbPort(port) with port < 1 or port > 65535, e.g. a 0 sentinel, a negative number, or an unparsed/overflowed integer from user input.","commonSituations":"Reading the port from a config file or user input without parsing/validating, passing a raw string cast that yields 0, or accidentally passing a full 'host:port' string numeric remainder.","solutions":["Validate the port is an integer in [1, 65535] before calling setAdbPort","Use Ops.isValidAdbPort(port) as a pre-check and reject invalid input at the UI layer","If the value comes from parsing, ensure Integer.parseInt succeeded and the string was a plain number","Correct the stored/configured value to a real ADB port (default 5555 for adbd over TCP)"],"exampleFix":"// before\nOps.setAdbPort(Integer.parseInt(portInput));\n// after\nint port = Integer.parseInt(portInput.trim());\nif (!Ops.isValidAdbPort(port)) {\n    throw new IllegalArgumentException(\"Port must be 1-65535, got \" + port);\n}\nOps.setAdbPort(port);","handlingStrategy":"validation","validationCode":"if (port < 1 || port > 65535) {\n    throw new IllegalArgumentException(\"Port must be 1-65535\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    Ops.setAdbPort(port);\n} catch (IllegalArgumentException e) {\n    // show validation error to user / use default port\n    Ops.setAdbPort(DEFAULT_ADB_PORT);\n}","preventionTips":["Run Ops.isValidAdbPort() as a pre-check","Parse user input with Integer.parseInt inside try/catch","Never pass 0 or -1 as a sentinel port","Normalize 'host:port' strings by splitting before parsing"],"tags":["android","validation","adb"],"backgroundTag":"value-out-of-range","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"}