Skip to content

Commit 6166876

Browse files
committed
goto-instrument: add early output file validation
Validate output file presence before expensive analysis operations to prevent wasted computation when command is malformed. Fixes: #2593
1 parent 4fe3ade commit 6166876

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

src/goto-instrument/goto_instrument_parse_options.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,55 @@ int goto_instrument_parse_optionst::doit()
124124
return CPROVER_EXIT_USAGE_ERROR;
125125
}
126126

127+
// Check if an output file is required before expensive operations
128+
// Most operations that modify the model require an output file
129+
if(cmdline.args.size() < 2)
130+
{
131+
// Check if this is a read-only operation that doesn't require output
132+
bool is_read_only_operation =
133+
cmdline.isset("validate-goto-binary") ||
134+
cmdline.isset("validate-goto-model") ||
135+
cmdline.isset("show-goto-functions") ||
136+
cmdline.isset("list-goto-functions") ||
137+
cmdline.isset("show-symbol-table") || cmdline.isset("show-properties") ||
138+
cmdline.isset("show-claims") || cmdline.isset("document-claims-html") ||
139+
cmdline.isset("document-properties-html") ||
140+
cmdline.isset("document-claims-latex") ||
141+
cmdline.isset("document-properties-latex") ||
142+
cmdline.isset("show-loops") || cmdline.isset("show-value-sets") ||
143+
cmdline.isset("show-global-may-alias") ||
144+
cmdline.isset("show-local-bitvector-analysis") ||
145+
cmdline.isset("show-custom-bitvector-analysis") ||
146+
cmdline.isset("show-escape-analysis") ||
147+
cmdline.isset("show-struct-alignment") ||
148+
cmdline.isset("show-intervals") || cmdline.isset("show-uninitialized") ||
149+
cmdline.isset("show-locations") || cmdline.isset("show-points-to") ||
150+
cmdline.isset("show-rw-set") || cmdline.isset("show-natural-loops") ||
151+
cmdline.isset("show-lexical-loops") || cmdline.isset("show-threaded") ||
152+
cmdline.isset("show-reaching-definitions") ||
153+
cmdline.isset("show-dependence-graph") ||
154+
cmdline.isset("show-call-sequences") ||
155+
cmdline.isset("check-call-sequence") || cmdline.isset("list-symbols") ||
156+
cmdline.isset("list-undefined-functions") ||
157+
cmdline.isset("list-calls-args") ||
158+
cmdline.isset("show-local-safe-pointers") ||
159+
cmdline.isset("show-safe-dereferences") ||
160+
cmdline.isset("show-sese-regions") ||
161+
cmdline.isset("show-goto-function-call-graph") ||
162+
cmdline.isset("reachable-call-graph") || cmdline.isset("call-graph") ||
163+
cmdline.isset("dot") || cmdline.isset("xml") || cmdline.isset("horn") ||
164+
cmdline.isset("print-internal-representation") ||
165+
cmdline.isset("interpreter");
166+
167+
if(!is_read_only_operation)
168+
{
169+
log.error() << "Error: Output file name required. "
170+
<< "Run 'goto-instrument --help' for usage information."
171+
<< messaget::eom;
172+
return CPROVER_EXIT_USAGE_ERROR;
173+
}
174+
}
175+
127176
messaget::eval_verbosity(
128177
cmdline.get_value("verbosity"), messaget::M_STATUS, ui_message_handler);
129178

0 commit comments

Comments
 (0)