{"record":{"id":"0f47d509ec8a1503","repo":"nodejs/node","slug":"comment-already-set-n","errorCode":null,"errorMessage":"comment already set\\n","messagePattern":"comment already set\\\\n","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"deps/brotli/c/tools/brotli.c","lineNumber":483,"sourceCode":"          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;\n          }\n        } else if (c == 'C') {\n          if (comment_set) {\n            fprintf(stderr, \"comment already set\\n\");\n            return COMMAND_INVALID;\n          }\n          params->comment_len = MAX_COMMENT_LEN;\n          if (!ParseBase64(argv[i], params->comment, &params->comment_len)) {\n            fprintf(stderr, \"invalid base64-encoded comment\\n\");\n            return COMMAND_INVALID;\n          }\n          comment_set = BROTLI_TRUE;\n        } else if (c == 'D') {\n          if (params->dictionary_path) {\n            fprintf(stderr, \"dictionary path already set\\n\");\n            return COMMAND_INVALID;\n          }\n          params->dictionary_path = argv[i];\n        } else if (c == 'S') {\n          if (suffix_set) {\n            fprintf(stderr, \"suffix already set\\n\");\n            return COMMAND_INVALID;","sourceCodeStart":465,"sourceCodeEnd":501,"githubUrl":"https://github.com/nodejs/node/blob/1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e/deps/brotli/c/tools/brotli.c#L465-L501","documentation":"`-C B64` attaches a custom comment to the brotli stream (stored in the header). The parser latches it via `comment_set`; a second `-C` is rejected with COMMAND_INVALID because comments are singular.","triggerScenarios":"`brotli -C AAAA -C BBBB in`, or `-C` combined with `--comment=...`.","commonSituations":"Tooling that adds a default comment plus a user-supplied one; merging metadata-injection steps.","solutions":["Concatenate the comment content before encoding and pass `-C` once.","Drop one of the two `-C`/`--comment` occurrences."],"exampleFix":"# before\nbrotli -C AAAA -C BBBB in\n# after\nbrotli -C \"$(printf 'AAAABBBB' | base64)\" in","handlingStrategy":"validation","validationCode":"# bash: at most one comment setter\nc=$(printf '%s\\n' \"$@\" | grep -cE '^(-C|--comment.*)$')\nif [ \"$c\" -gt 1 ]; then echo \"multiple comment flags\" >&2; exit 2; fi\nbrotli \"$@\"","typeGuard":null,"tryCatchPattern":"# bash\nif ! brotli \"$@\"; then rc=$?; echo \"brotli exit $rc; dedupe comment flags\" >&2; exit \"$rc\"; fi","preventionTips":["Concatenate comment content before base64-encoding.","Pick either `-C` or `--comment=`, not both."],"tags":["cli","brotli","argument-parsing","duplicate-flag","comment"],"backgroundTag":null,"analyzedSha":"1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e","analyzedAt":"2026-08-13T00:53:24.642Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}