{"record":{"id":"23d3ac5796038364","repo":"opendataloader-project/opendataloader-pdf","slug":"invalid-page-range-s-start-page-cannot-be-grea","errorCode":null,"errorMessage":"Invalid page range '%s': start page cannot be greater than end page","messagePattern":"Invalid page range '(.+?)': start page cannot be greater than end page","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"java/opendataloader-pdf-core/src/main/java/org/opendataloader/pdf/api/Config.java","lineNumber":779,"sourceCode":"        return result;\n    }\n\n    private static void parseRange(String range, String fullInput, List<Integer> result) {\n        String[] parts = range.split(\"-\", SPLIT_KEEP_EMPTY_TRAILING);\n        if (parts.length != 2 || parts[0].isEmpty() || parts[1].isEmpty()) {\n            throw new IllegalArgumentException(String.format(INVALID_PAGE_RANGE_FORMAT, fullInput));\n        }\n\n        try {\n            int start = Integer.parseInt(parts[0].trim());\n            int end = Integer.parseInt(parts[1].trim());\n\n            if (start < 1 || end < 1) {\n                throw new IllegalArgumentException(\n                    String.format(\"Page numbers must be positive: '%s'\", fullInput));\n            }\n            if (start > end) {\n                throw new IllegalArgumentException(\n                    String.format(\"Invalid page range '%s': start page cannot be greater than end page\", range));\n            }\n\n            for (int i = start; i <= end; i++) {\n                result.add(i);\n            }\n        } catch (NumberFormatException e) {\n            throw new IllegalArgumentException(String.format(INVALID_PAGE_RANGE_FORMAT, fullInput));\n        }\n    }\n\n    private static void parseSinglePage(String page, String fullInput, List<Integer> result) {\n        try {\n            int pageNum = Integer.parseInt(page);\n            if (pageNum < 1) {\n                throw new IllegalArgumentException(\n                    String.format(\"Page numbers must be positive: '%s'\", fullInput));\n            }","sourceCodeStart":761,"sourceCodeEnd":797,"githubUrl":"https://github.com/opendataloader-project/opendataloader-pdf/blob/a7789b8e77dd05e2b8659eb3ea12fc458f80bfb8/java/opendataloader-pdf-core/src/main/java/org/opendataloader/pdf/api/Config.java#L761-L797","documentation":"parseRange rejects a range where the start bound parses and is positive but is greater than the end bound (e.g. 5-2). The message names the offending range token, not the full input. This is distinct from a non-positive or non-numeric bound.","triggerScenarios":"config.setPages(\"5-2\"), config.setPages(\"10-9\").","commonSituations":"User swaps start/end; range built from min/max variables assigned in the wrong order.","solutions":["Order the range so start <= end.","When constructing from two page numbers, normalize: min + \"-\" + max."],"exampleFix":"// before: config.setPages(high + \"-\" + low);\n// after:  config.setPages(Math.min(low, high) + \"-\" + Math.max(low, high));","handlingStrategy":"validation","validationCode":"for (String t : pages.split(\",\")) {\n    if (t.contains(\"-\")) {\n        String[] h = t.split(\"-\", -1);\n        int a = Integer.parseInt(h[0].trim()), b = Integer.parseInt(h[1].trim());\n        if (a > b) throw new IllegalArgumentException(\"Range start > end: \" + t);\n    }\n}\nconfig.setPages(pages);","typeGuard":null,"tryCatchPattern":"try { config.setPages(raw); }\ncatch (IllegalArgumentException e) { /* normalize order or reprompt */ }","preventionTips":["When building from two numbers, normalize to min + \"-\" + max.","Validate start <= end on every range token upstream."],"tags":["configuration","validation","pages"],"backgroundTag":null,"analyzedSha":"a7789b8e77dd05e2b8659eb3ea12fc458f80bfb8","analyzedAt":"2026-08-14T05:22:03.953Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}