{"record":{"id":"a4c006a8edafa64f","repo":"presidentbeef/brakeman","slug":"cannot-specify-output-format-if-multiple-output-fi","errorCode":null,"errorMessage":"Cannot specify output format if multiple output files specified","messagePattern":"Cannot specify output format if multiple output files specified","errorType":"exception","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"lib/brakeman.rb","lineNumber":259,"sourceCode":"      :parallel_checks => true,\n      :parser_timeout => 10,\n      :use_prism => true,\n      :relative_path => false,\n      :report_progress => true,\n      :safe_methods => Set.new,\n      :show_ignored => false,\n      :sql_safe_methods => Set.new,\n      :skip_checks => Set.new,\n      :skip_vendor => true,\n    }\n  end\n\n  #Determine output formats based on options[:output_formats]\n  #or options[:output_files]\n  def self.get_output_formats options\n    #Set output format\n    if options[:output_format] && options[:output_files] && options[:output_files].size > 1\n      raise ArgumentError, \"Cannot specify output format if multiple output files specified\"\n    end\n    if options[:output_format]\n      get_formats_from_output_format options[:output_format]\n    elsif options[:output_files]\n      get_formats_from_output_files options[:output_files]\n    else\n      begin\n        self.load_brakeman_dependency 'terminal-table', :allow_fail\n        return [:to_s]\n      rescue LoadError\n        return [:to_json]\n      end\n    end\n  end\n\n  def self.get_formats_from_output_format output_format\n    case output_format\n    when :html, :to_html","sourceCodeStart":241,"sourceCodeEnd":277,"githubUrl":"https://github.com/presidentbeef/brakeman/blob/649e678d0a46bda0e7c35874fa7af5d16e19b4f1/lib/brakeman.rb#L241-L277","documentation":"Brakeman decides the report format either from an explicit `-f/--format` option or by inferring one format per `-o/--output` file from its file extension. When you supply an explicit `--output-format` AND more than one output file, `Brakeman.get_output_formats` raises `ArgumentError`, because a single explicit format cannot be reconciled with multiple files that each declare their own extension.","triggerScenarios":"Running `brakeman -f json -o report.json -o report.html` (one `-f` plus two `-o` flags), or programmatically calling `Brakeman.run :output_format => :to_json, :output_files => ['report.json', 'report.html']` where the files array has more than one element.","commonSituations":"CI setups that want both a JSON artifact for tooling (e.g. GitLab/GitHub code scanning) and an HTML or SARIF report for humans, where `-f json` was already configured and a second `-o` was added later; wrapper scripts or shared config that always inject a default `--format` on top of user-specified outputs.","solutions":["Drop the `-f/--format` flag and let Brakeman infer each file's format from its extension: `brakeman -o report.json -o report.html`.","If you need an explicit format, keep exactly one output file: `brakeman -f json -o report.json`.","If you need two formats but one has no usable extension, run brakeman twice with separate `-f`/`-o` pairs.","If you drive Brakeman programmatically, do not set `:output_format` when `:output_files` has more than one entry."],"exampleFix":"# before\nbrakeman -f json -o report.json -o report.html   # => ArgumentError\n\n# after (formats inferred from extensions: JSON + HTML)\nbrakeman -o report.json -o report.html","handlingStrategy":"validation","validationCode":"# Ruby, guard your option hash before Brakeman.run\ndef sane_output_options!(opts)\n  if opts[:output_format] && opts[:output_files] && opts[:output_files].size > 1\n    opts.delete(:output_format) # let extensions drive per-file format\n    warn 'Dropped :output_format; formats inferred from output file extensions.'\n  end\nend","typeGuard":null,"tryCatchPattern":"begin\n  Brakeman.run :app_path => app, :output_format => fmt, :output_files => files\nrescue ArgumentError => e\n  if e.message.start_with?('Cannot specify output format')\n    retry without :output_format\n  end\n  raise\nend","preventionTips":["Convention: never combine -f/--format with more than one -o/--output; encode formats in the filenames instead (.json, .html, .sarif, .text).","Keep CI invocation templates free of a hardcoded --format when outputs are configurable by users.","Programmatically, treat :output_format as mutually exclusive with multi-element :output_files."],"tags":["brakeman","cli","option-conflict","output-format","configuration","argument-error"],"backgroundTag":"invalid-option-combination","analyzedSha":"649e678d0a46bda0e7c35874fa7af5d16e19b4f1","analyzedAt":"2026-08-21T18:43:10.938Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}