{"record":{"id":"f1bfdbc52cefeff7","repo":"XTLS/Xray-core","slug":"padding-turn-length-d-is-not-an-allowed-variant","errorCode":null,"errorMessage":"padding turn length %d is not an allowed variant","messagePattern":"padding turn length (.+?) is not an allowed variant","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"transport/internet/finalmask/xmc/padding.go","lineNumber":237,"sourceCode":"\tif written != recordLength {\n\t\treturn fmt.Errorf(\"padding chunks total %d, want %d\", written, recordLength)\n\t}\n\treturn nil\n}\n\nfunc readPaddingTurn(r io.Reader, turn paddingTurn, prefixLength int) error {\n\tencodedLength, headerLength, err := readVarintWithLength(r)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"read padding header: %w\", err)\n\t}\n\trecordLength := int(encodedLength)\n\tif recordLength < headerLength || recordLength > maxPaddingTurnLength {\n\t\treturn fmt.Errorf(\"invalid padding record length: %d\", recordLength)\n\t}\n\ttotalLength := prefixLength + recordLength\n\tif !paddingTurnAcceptsLength(turn, totalLength) {\n\t\tif len(turn.variants) > 0 {\n\t\t\treturn fmt.Errorf(\"padding turn length %d is not an allowed variant\", totalLength)\n\t\t}\n\t\treturn fmt.Errorf(\"padding turn length %d is outside %d-%d\", totalLength, turn.minLength, turn.maxLength)\n\t}\n\n\tvar buffer [paddingBufferLength]byte\n\tremaining := recordLength - headerLength\n\tfor remaining > 0 {\n\t\tchunkLength := min(remaining, len(buffer))\n\t\tif _, err := io.ReadFull(r, buffer[:chunkLength]); err != nil {\n\t\t\treturn fmt.Errorf(\"read padding body: %w\", err)\n\t\t}\n\t\tremaining -= chunkLength\n\t}\n\treturn nil\n}\n\nfunc selectPaddingVariant(turn paddingTurn, prefixLength int) (int, []int, []paddingDelayRange, error) {\n\tif len(turn.variants) == 0 {","sourceCodeStart":219,"sourceCodeEnd":255,"githubUrl":"https://github.com/XTLS/Xray-core/blob/7d214f8b094f75322fa3990f8aadad1c912f24f5/transport/internet/finalmask/xmc/padding.go#L219-L255","documentation":"Error \"padding turn length %d is not an allowed variant\" thrown in XTLS/Xray-core.","triggerScenarios":"Thrown at transport/internet/finalmask/xmc/padding.go:237 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"7d214f8b094f75322fa3990f8aadad1c912f24f5","analyzedAt":"2026-08-15T14:26:24.325Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}