{"record":{"id":"6e7c2d8094a57b59","repo":"netty/netty","slug":"failed-to-convert-long-value-for-header-name","errorCode":null,"errorMessage":"Failed to convert long value for header '{name}'","messagePattern":"Failed to convert long value for header '(.+?)'","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"codec-base/src/main/java/io/netty/handler/codec/DefaultHeaders.java","lineNumber":1215,"sourceCode":"            return valueConverter.convertShort(value);\n        } catch (IllegalArgumentException e) {\n            throw new IllegalArgumentException(\"Failed to convert short value for header '\" + name + '\\'', e);\n        }\n    }\n\n    private V fromInt(K name, int value) {\n        try {\n            return valueConverter.convertInt(value);\n        } catch (IllegalArgumentException e) {\n            throw new IllegalArgumentException(\"Failed to convert int value for header '\" + name + '\\'', e);\n        }\n    }\n\n    private V fromLong(K name, long value) {\n        try {\n            return valueConverter.convertLong(value);\n        } catch (IllegalArgumentException e) {\n            throw new IllegalArgumentException(\"Failed to convert long value for header '\" + name + '\\'', e);\n        }\n    }\n\n    private V fromFloat(K name, float value) {\n        try {\n            return valueConverter.convertFloat(value);\n        } catch (IllegalArgumentException e) {\n            throw new IllegalArgumentException(\"Failed to convert float value for header '\" + name + '\\'', e);\n        }\n    }\n\n    private V fromDouble(K name, double value) {\n        try {\n            return valueConverter.convertDouble(value);\n        } catch (IllegalArgumentException e) {\n            throw new IllegalArgumentException(\"Failed to convert double value for header '\" + name + '\\'', e);\n        }\n    }","sourceCodeStart":1197,"sourceCodeEnd":1233,"githubUrl":"https://github.com/netty/netty/blob/70040aacae241e9ba371e758f5b86e470bd77ad1/codec-base/src/main/java/io/netty/handler/codec/DefaultHeaders.java#L1197-L1233","documentation":"DefaultHeaders turns a Java `long` into value type V via ValueConverter.convertLong; an IllegalArgumentException from the converter is rewrapped with the header name. The default converter calls Long.toString and cannot fail, so the throw comes from a custom converter.","triggerScenarios":"Calling headers.addLong(name, l), headers.setLong(name, l), or addObject/setObject with a long on a DefaultHeaders whose ValueConverter.convertLong throws.","commonSituations":"A custom converter rejecting negative longs (e.g. sizes, timestamps); a converter enforcing max values; a misbehaving converter.","solutions":["Inspect the ValueConverter used by DefaultHeaders and read convertLong's rule.","Validate the long against that rule before addLong/setLong.","Use the default CharSequenceValueConverter if you do not need custom long handling."],"exampleFix":"// before\nheaders.setLong(\"size\", size);\n\n// after: enforce the converter's rule\nif (size < 0) {\n    throw new IllegalArgumentException(\"size must be >= 0\");\n}\nheaders.setLong(\"size\", size);","handlingStrategy":"validation","validationCode":"// Validate the long against your converter's rule (e.g. non-negative size).\nlong size = ...;\nif (size < 0) {\n    throw new IllegalArgumentException(\"size must be >= 0\");\n}\nheaders.setLong(\"size\", size);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Read convertLong's rule in the ValueConverter before setLong.","Reject negative/out-of-domain longs up front when the converter forbids them.","Prefer the default converter for plain long formatting."],"tags":["netty","codec","headers","value-converter","long"],"backgroundTag":null,"analyzedSha":"70040aacae241e9ba371e758f5b86e470bd77ad1","analyzedAt":"2026-08-14T01:29:15.551Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}