{"record":{"id":"0cffc8aaff6dd365","repo":"XTLS/Xray-core","slug":"unsupported-padding-placement","errorCode":null,"errorMessage":"unsupported padding placement: ","messagePattern":"unsupported padding placement: ","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"infra/conf/transport_method.go","lineNumber":351,"sourceCode":"\n\tif c.XPaddingBytes != (Int32Range{}) && (c.XPaddingBytes.From <= 0 || c.XPaddingBytes.To <= 0) {\n\t\treturn nil, errors.New(\"xPaddingBytes cannot be disabled\")\n\t}\n\n\tif c.XPaddingKey == \"\" {\n\t\tc.XPaddingKey = \"x_padding\"\n\t}\n\n\tif c.XPaddingHeader == \"\" {\n\t\tc.XPaddingHeader = \"X-Padding\"\n\t}\n\n\tswitch c.XPaddingPlacement {\n\tcase \"\":\n\t\tc.XPaddingPlacement = \"queryInHeader\"\n\tcase \"cookie\", \"header\", \"query\", \"queryInHeader\":\n\tdefault:\n\t\treturn nil, errors.New(\"unsupported padding placement: \" + c.XPaddingPlacement)\n\t}\n\n\tswitch c.XPaddingMethod {\n\tcase \"\":\n\t\tc.XPaddingMethod = \"repeat-x\"\n\tcase \"repeat-x\", \"tokenish\":\n\tdefault:\n\t\treturn nil, errors.New(\"unsupported padding method: \" + c.XPaddingMethod)\n\t}\n\n\tswitch c.UplinkDataPlacement {\n\tcase \"\":\n\t\tc.UplinkDataPlacement = splithttp.PlacementAuto\n\tcase splithttp.PlacementAuto, splithttp.PlacementBody:\n\tcase splithttp.PlacementCookie, splithttp.PlacementHeader:\n\t\tif c.Mode != \"packet-up\" {\n\t\t\treturn nil, errors.New(\"UplinkDataPlacement can be \" + c.UplinkDataPlacement + \" only in packet-up mode\")\n\t\t}","sourceCodeStart":333,"sourceCodeEnd":369,"githubUrl":"https://github.com/XTLS/Xray-core/blob/7d214f8b094f75322fa3990f8aadad1c912f24f5/infra/conf/transport_method.go#L333-L369","documentation":"SplitHTTPConfig.Build() validates \"xPaddingPlacement\" in a switch at transport_method.go:346-352. Empty defaults to \"queryInHeader\"; only \"cookie\", \"header\", \"query\", \"queryInHeader\" are accepted; anything else appends the bad value to this error.","triggerScenarios":"\"xPaddingPlacement\": \"query-in-header\" (hyphenated instead of camelCase), \"body\", \"none\", or any string outside the four allowed values in splithttp transportSettings. Note the default is queryInHeader — writing an invalid value explicitly is the only way to hit this.","commonSituations":"Guessing placement names from the padding docs instead of the enum; using hyphenated forms consistent with mode names (\"packet-up\") which don't apply here; stale third-party config generators.","solutions":["Use one of: \"cookie\", \"header\", \"query\", \"queryInHeader\" (exact camelCase)","Omit \"xPaddingPlacement\" to accept the \"queryInHeader\" default"],"exampleFix":"// before\n\"xPaddingPlacement\": \"query-in-header\"\n// after\n\"xPaddingPlacement\": \"queryInHeader\"","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"func validXPaddingPlacement(p string) bool {\n\tswitch p {\n\tcase \"\", \"cookie\", \"header\", \"query\", \"queryInHeader\":\n\t\treturn true\n\t}\n\treturn false\n}","tryCatchPattern":null,"preventionTips":["Use exact camelCase \"queryInHeader\" — not hyphenated forms","Omit the field to accept the queryInHeader default"],"tags":["config","splithttp","padding","validation"],"backgroundTag":null,"analyzedSha":"7d214f8b094f75322fa3990f8aadad1c912f24f5","analyzedAt":"2026-08-15T14:26:24.325Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}