zeek-setup: Early exit when parsing failed

When there are errors reported during yyparse(), Zeek still continued
running initialization functions like init_general_global_var(), init_net_var()
and run_bif_initializers(). These usually call abort() in unexpected
situations causing misleading and confusing errors. This patch prevents
this by exiting earlier.

Closes #3316
This commit is contained in:
Arne Welzel 2023-09-27 09:49:51 +02:00
parent c6486e70ef
commit 12e0dc110b

View file

@ -820,13 +820,16 @@ SetupResult setup(int argc, char** argv, Options* zopts)
// when we actually end up reading interactively from stdin. // when we actually end up reading interactively from stdin.
set_signal_mask(false); set_signal_mask(false);
run_state::is_parsing = true; run_state::is_parsing = true;
yyparse(); int yyparse_result = yyparse();
run_state::is_parsing = false; run_state::is_parsing = false;
set_signal_mask(true); set_signal_mask(true);
RecordVal::DoneParsing(); RecordVal::DoneParsing();
TableVal::DoneParsing(); TableVal::DoneParsing();
if ( yyparse_result != 0 || zeek::reporter->Errors() > 0 )
exit(1);
init_general_global_var(); init_general_global_var();
init_net_var(); init_net_var();
run_bif_initializers(); run_bif_initializers();