{"record":{"id":"437a4ed610dd8c90","repo":"quarkusio/quarkus","slug":"malformed-parameters","errorCode":null,"errorMessage":"Malformed parameters: ","messagePattern":"Malformed parameters: ","errorType":"http","errorClass":"BadRequestException","httpStatus":400,"severity":"warning","filePath":"independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/core/request/AcceptHeaders.java","lineNumber":170,"sourceCode":"                parameters = new LinkedHashMap<String, String>();\n                offset = parseParameters(parameters, header, offset);\n                qualityValue = evaluateAcceptParameters(parameters);\n            } else {\n                subtype = header.substring(offset, itemEndIndex);\n                offset = itemEndIndex + 1;\n            }\n            result.put(new MediaType(type.trim(), subtype.trim(), parameters), qualityValue);\n        }\n\n        //LogMessages.LOGGER.debug(result.toString());\n        return result;\n    }\n\n    private static int parseParameters(Map<String, String> parameters, String header, int offset) {\n        while (true) {\n            int equalsIndex = header.indexOf('=', offset);\n            if (equalsIndex < 0)\n                throw new BadRequestException(\"Malformed parameters: \" + header);\n            String name = header.substring(offset, equalsIndex).trim();\n            offset = equalsIndex + 1;\n            if (header.charAt(offset) == '\"') {\n                int end = offset;\n                ++offset;\n                do {\n                    end = header.indexOf('\"', ++end);\n                    if (end < 0)\n                        throw new BadRequestException(\"Unclosed quotes:\" + header);\n                } while (header.charAt(end - 1) == '\\\\');\n                String value = header.substring(offset, end);\n                parameters.put(name, value);\n                offset = end + 1;\n\n                int parameterEndIndex = header.indexOf(';', offset);\n                int itemEndIndex = header.indexOf(',', offset);\n                if (parameterEndIndex == itemEndIndex) {\n                    assert itemEndIndex == -1;","sourceCodeStart":152,"sourceCodeEnd":188,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/resteasy-reactive/server/runtime/src/main/java/org/jboss/resteasy/reactive/server/core/request/AcceptHeaders.java#L152-L188","documentation":"parseParameters() parses name=value pairs after a ';' in a media-type item. If it cannot find an '=' for the next parameter, the parameters section is malformed and this BadRequestException is thrown.","triggerScenarios":"Accept headers with dangling parameters, e.g. 'application/json;' or 'text/html;charset' (name without =value).","commonSituations":"Truncated headers from proxies or load balancers; manual header editing mistakes; template strings where the value part was never filled in.","solutions":["Ensure every parameter after ';' has the form name=value","Remove the trailing ';' if no parameter follows","Inspect intermediary proxies that may truncate header values"],"exampleFix":"// before\nAccept: text/html;charset\n// after\nAccept: text/html;charset=utf-8","handlingStrategy":"validation","validationCode":"boolean parametersAreKeyValuePairs(String item) {\n    String[] parts = item.split(\";\");\n    for (int i = 1; i < parts.length; i++) {\n        String p = parts[i].trim();\n        if (!p.contains(\"=\")) return false;\n    }\n    return true;\n}","typeGuard":"boolean hasWellFormedParams(String header) {\n    return header != null && java.util.Arrays.stream(header.split(\",\"))\n        .allMatch(this::parametersAreKeyValuePairs);\n}","tryCatchPattern":"try {\n    types = AcceptHeaders.getMediaTypeQualityValues(accept);\n} catch (BadRequestException e) {\n    log.warn(\"Malformed Accept parameters: \" + accept);\n    types = Collections.emptyMap();\n}","preventionTips":["Never emit a trailing ';' in a media-type item","Always pair parameter names with values (name=value)","Strip empty parameter segments when building headers programmatically"],"tags":["http","header-parsing","parameters"],"backgroundTag":"malformed-http-header","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}