{"record":{"id":"c99f13bdcf5fd7ec","repo":"nodejs/node","slug":"write-to-standard-output-already-set-o-n","errorCode":null,"errorMessage":"write to standard output already set (-o)\\n","messagePattern":"write to standard output already set \\(-o\\)\\\\n","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"deps/brotli/c/tools/brotli.c","lineNumber":449,"sourceCode":"        /* o/q/w/C/D/S with parameter is expected */\n        if (c != 'o' && c != 'q' && c != 'w' && c != 'C' && c != 'D' &&\n            c != 'S') {\n          fprintf(stderr, \"invalid argument -%c\\n\", c);\n          return COMMAND_INVALID;\n        }\n        if (j + 1 != arg_len) {\n          fprintf(stderr, \"expected parameter for argument -%c\\n\", c);\n          return COMMAND_INVALID;\n        }\n        i++;\n        if (i == argc || !argv[i] || argv[i][0] == 0) {\n          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;","sourceCodeStart":431,"sourceCodeEnd":467,"githubUrl":"https://github.com/nodejs/node/blob/1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e/deps/brotli/c/tools/brotli.c#L431-L467","documentation":"The `-o PATH` option sets the single output destination (`params->output_path`) and is latched by `output_set`. A second `-o` would leave the destination ambiguous, so brotli rejects it with COMMAND_INVALID. Note `-o` writes to a file path; do not confuse it with stdout (`-c`).","triggerScenarios":"`brotli -o a -o b in`, or a wrapper plus a user both adding `-o`.","commonSituations":"Generated pipelines concatenating flag lists; an alias `brotli='brotli -o /tmp/out'` colliding with an explicit user `-o`.","solutions":["Keep exactly one `-o PATH`; remove the duplicate.","For multiple inputs use output naming via suffix (`-S`) rather than `-o`.","Strip any `-o` injected by aliases/functions before adding a user one."],"exampleFix":"# before\nbrotli -o a -o b in\n# after\nbrotli -o b in","handlingStrategy":"validation","validationCode":"# bash: at most one -o / --output\no=$(printf '%s\\n' \"$@\" | grep -cE '^(-o|--output.*)$')\nif [ \"$o\" -gt 1 ]; then echo \"multiple output paths\" >&2; exit 2; fi\nbrotli \"$@\"","typeGuard":null,"tryCatchPattern":"# bash\nif ! brotli \"$@\"; then rc=$?; echo \"brotli exit $rc; check -o duplicates\" >&2; exit \"$rc\"; fi","preventionTips":["For multi-file runs use `-S` suffix output instead of `-o`.","Strip alias-injected `-o` before adding a user-supplied one."],"tags":["cli","brotli","argument-parsing","duplicate-flag","output"],"backgroundTag":null,"analyzedSha":"1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e","analyzedAt":"2026-08-13T00:53:24.642Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}