Allow --parse-only to work with --usage-issues flag

Use of --parse-only would previously exit before --usage-issues had a
chance to analyze scripts and report any discovered issues and it can be
useful to combine both flags for checking scripts for mistakes without
actually executing any code.

This also improves the behavior of --parse-only in combination with
reporting problems in signature files (previously, it exited before
even reading them).
This commit is contained in:
Jon Siwek 2021-02-05 14:46:47 -08:00
parent 91dc6fbbb0
commit ac0b09d1a4
6 changed files with 34 additions and 6 deletions

View file

@ -680,12 +680,6 @@ SetupResult setup(int argc, char** argv, Options* zopts)
file_mgr->InitPostScript(); file_mgr->InitPostScript();
dns_mgr->InitPostScript(); dns_mgr->InitPostScript();
if ( options.parse_only )
{
int rc = (reporter->Errors() > 0 ? 1 : 0);
exit(rc);
}
#ifdef USE_PERFTOOLS_DEBUG #ifdef USE_PERFTOOLS_DEBUG
} }
#endif #endif
@ -764,6 +758,9 @@ SetupResult setup(int argc, char** argv, Options* zopts)
// This option is report-and-exit. // This option is report-and-exit.
exit(0); exit(0);
if ( options.parse_only )
exit(reporter->Errors() != 0);
if ( dns_type != DNS_PRIME ) if ( dns_type != DNS_PRIME )
run_state::detail::init_run(options.interface, options.pcap_file, options.pcap_output_file, options.use_watchdog); run_state::detail::init_run(options.interface, options.pcap_file, options.pcap_output_file, options.use_watchdog);

View file

@ -0,0 +1,3 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error: Error in signature (./test.sig:1): syntax error

View file

@ -0,0 +1,2 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error: Can't open signature file nope

View file

@ -0,0 +1,2 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
warning in <...>/parse-only-usage-issues.zeek, line 8: possibly used without definition (a)

View file

@ -0,0 +1,15 @@
# @TEST-DOC: ``zeek -a`` should parse scripts and also still detect signature file issues.
# @TEST-EXEC-FAIL: zeek -b -a -s nope %INPUT >missing-sig-file 2>&1
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff missing-sig-file
# @TEST-EXEC-FAIL: zeek -b -a test.zeek >invalid-sig-file 2>&1
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff invalid-sig-file
@TEST-START-FILE test.zeek
@load-sigs test.sig
@TEST-END-FILE
@TEST-START-FILE test.sig
invalid
@TEST-END-FILE

View file

@ -0,0 +1,9 @@
# @TEST-DOC: ``zeek -a -u`` should detect usage issues without executing code
# @TEST-EXEC: zeek -b -a -u %INPUT >out 2>&1
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out
event zeek_init()
{
local a: count;
print a;
}