{"record":{"id":"1133fc6530e78151","repo":"nodejs/node","slug":"error-parsing-quality-value-s-n","errorCode":null,"errorMessage":"error parsing quality value [%s]\\n","messagePattern":"error parsing quality value \\[(.+?)\\]\\\\n","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"deps/brotli/c/tools/brotli.c","lineNumber":461,"sourceCode":"          fprintf(stderr, \"expected parameter for argument -%c\\n\", c);\n          return COMMAND_INVALID;\n        }\n        params->not_input_indices[next_option_index++] = i;\n        if (c == 'o') {\n          if (output_set) {\n            fprintf(stderr, \"write to standard output already set (-o)\\n\");\n            return COMMAND_INVALID;\n          }\n          params->output_path = argv[i];\n        } else if (c == 'q') {\n          if (quality_set) {\n            fprintf(stderr, \"quality already set\\n\");\n            return COMMAND_INVALID;\n          }\n          quality_set = ParseInt(argv[i], BROTLI_MIN_QUALITY,\n                                 BROTLI_MAX_QUALITY, &params->quality);\n          if (!quality_set) {\n            fprintf(stderr, \"error parsing quality value [%s]\\n\", argv[i]);\n            return COMMAND_INVALID;\n          }\n        } else if (c == 'w') {\n          if (lgwin_set) {\n            fprintf(stderr, \"lgwin parameter already set\\n\");\n            return COMMAND_INVALID;\n          }\n          lgwin_set = ParseInt(argv[i], 0,\n                               BROTLI_MAX_WINDOW_BITS, &params->lgwin);\n          if (!lgwin_set) {\n            fprintf(stderr, \"error parsing lgwin value [%s]\\n\", argv[i]);\n            return COMMAND_INVALID;\n          }\n          if (params->lgwin != 0 && params->lgwin < BROTLI_MIN_WINDOW_BITS) {\n            fprintf(stderr,\n                    \"lgwin parameter (%d) smaller than the minimum (%d)\\n\",\n                    params->lgwin, BROTLI_MIN_WINDOW_BITS);\n            return COMMAND_INVALID;","sourceCodeStart":443,"sourceCodeEnd":479,"githubUrl":"https://github.com/nodejs/node/blob/1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e/deps/brotli/c/tools/brotli.c#L443-L479","documentation":"`ParseInt` (brotli.c:228) accepts only 1–5 decimal digits, rejects leading zeros (e.g. `011`), and requires the value within `BROTLI_MIN_QUALITY..BROTLI_MAX_QUALITY` (0..11). If `-q`'s argument fails any of these checks, brotli prints `error parsing quality value [<arg>]` and aborts. The offending value is echoed in the message.","triggerScenarios":"`brotli -q 99 in` (out of range), `brotli -q 011 in` (leading zero), `brotli -q abc in` (non-digit), `brotli -q 123456 in` (>5 digits), `brotli -q -5 in` (the `-5` is read as a flag, leaving `-q` without a value — actually yields the missing-parameter error, but `brotli -q ''` triggers this one).","commonSituations":"Porting `gzip -9` expectations (`-q 9` is fine but `>11` is not); passing floats like `-q 4.5`; negative numbers from a misconfigured variable.","solutions":["Use an integer in [0, 11] with no leading zeros, e.g. `-q 11`.","If the value comes from a variable, clamp/validate it first: `Q=$(( Q>11?11:Q<0?0:Q ))`.","For 'max' just use `-Z` or `--best` to avoid manual numbering."],"exampleFix":"# before\nbrotli -q 99 in\n# after\nbrotli -q 11 in","handlingStrategy":"validation","validationCode":"# bash: validate -q value (0..11, no leading zero, <=2 digits)\nargv=(\"$@\")\nfor ((i=0;i<${#argv[@]};i++)); do\n  if [ \"${argv[$i]}\" = -q ]; then\n    v=${argv[$((i+1))]:-}\n    if ! [[ \"$v\" =~ ^(0|[1-9][0-9]?)$ ]] || [ \"$v\" -gt 11 ]; then\n      echo \"invalid quality '$v' (need 0..11, no leading zero)\" >&2; exit 2\n    fi\n  fi\ndone\nbrotli \"$@\"","typeGuard":null,"tryCatchPattern":"# bash\nif ! brotli \"$@\"; then rc=$?; echo \"brotli exit $rc; verify -q value\" >&2; exit \"$rc\"; fi","preventionTips":["Clamp source variables to [0,11] and strip leading zeros before passing.","Use `-Z` for max to avoid manual numbering."],"tags":["cli","brotli","argument-parsing","quality","parse-error"],"backgroundTag":null,"analyzedSha":"1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e","analyzedAt":"2026-08-13T00:53:24.642Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}