{"record":{"id":"09128d3a4f7f5a81","repo":"prestodb/presto","slug":"invalid-header-value-s","errorCode":null,"errorMessage":"Invalid header value: %s","messagePattern":"Invalid header value: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"presto-main/src/main/java/com/facebook/presto/server/AsyncPageTransportServlet.java","lineNumber":140,"sourceCode":"    protected void parseURI(String requestURI, HttpServletRequest request, HttpServletResponse response)\n            throws IOException\n    {\n        // Split a task URI without allocating a list and unnecessary strings\n        // Example:  /v1/task/async/{taskId}/results/{bufferId}/{token}\n        TaskId taskId = null;\n        OutputBufferId bufferId = null;\n        long token = 0;\n\n        if (request != null) {\n            Enumeration<String> headerNames = request.getHeaderNames();\n            while (headerNames.hasMoreElements()) {\n                String headerName = headerNames.nextElement();\n                String headerValue = request.getHeader(headerName);\n                if (headerName.contains(\"\\r\") || headerName.contains(\"\\n\")) {\n                    throw new IllegalArgumentException(format(\"Invalid header name: %s\", headerName));\n                }\n                if (headerValue.contains(\"\\r\") || headerValue.contains(\"\\n\")) {\n                    throw new IllegalArgumentException(format(\"Invalid header value: %s\", headerValue));\n                }\n            }\n        }\n\n        int previousIndex = -1;\n        for (int part = 0; part < 8; part++) {\n            int nextIndex = requestURI.indexOf('/', previousIndex + 1);\n\n            if (nextIndex == -1 && part != 7 || nextIndex != -1 && part == 7) {\n                reportFailure(response, format(\"Unexpected URI for task result request in async mode: %s\", requestURI));\n                return;\n            }\n\n            switch (part) {\n                case 4:\n                    taskId = TaskId.valueOf(requestURI.substring(previousIndex + 1, nextIndex));\n                    break;\n                case 6:","sourceCodeStart":122,"sourceCodeEnd":158,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main/src/main/java/com/facebook/presto/server/AsyncPageTransportServlet.java#L122-L158","documentation":"parseURI in AsyncPageTransportServlet validates a custom header carrying URI parts; when a header value cannot be parsed (non-numeric token/token fields or malformed content), the servlet rejects it with this IOException.","triggerScenarios":"Thrown at presto-main/src/main/java/com/facebook/presto/server/AsyncPageTransportServlet.java:140 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the client/proxy that injects the malformed header value (e.g. control characters or non-ASCII bytes)"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}