diff --git a/CHANGES b/CHANGES index ee44d0e7e9..9037fd4fee 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,17 @@ +4.1.0-dev.216 | 2021-02-08 13:06:07 -0800 + + * Allow --parse-only to work with --usage-issues flag (Jon Siwek, Corelight) + + 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). + 4.1.0-dev.212 | 2021-02-05 10:56:23 -0800 * Support for Zeek script "Reaching Definitions" (RD) analysis (Vern Paxson, Corelight) diff --git a/VERSION b/VERSION index 615e5ce451..84691e38cf 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.1.0-dev.212 +4.1.0-dev.216 diff --git a/src/zeek-setup.cc b/src/zeek-setup.cc index e9e782616f..bf3db660f0 100644 --- a/src/zeek-setup.cc +++ b/src/zeek-setup.cc @@ -680,12 +680,6 @@ SetupResult setup(int argc, char** argv, Options* zopts) file_mgr->InitPostScript(); dns_mgr->InitPostScript(); - if ( options.parse_only ) - { - int rc = (reporter->Errors() > 0 ? 1 : 0); - exit(rc); - } - #ifdef USE_PERFTOOLS_DEBUG } #endif @@ -764,6 +758,9 @@ SetupResult setup(int argc, char** argv, Options* zopts) // This option is report-and-exit. exit(0); + if ( options.parse_only ) + exit(reporter->Errors() != 0); + if ( dns_type != DNS_PRIME ) run_state::detail::init_run(options.interface, options.pcap_file, options.pcap_output_file, options.use_watchdog); diff --git a/testing/btest/Baseline/core.parse-only-signature-file-issues/invalid-sig-file b/testing/btest/Baseline/core.parse-only-signature-file-issues/invalid-sig-file new file mode 100644 index 0000000000..5216ce608e --- /dev/null +++ b/testing/btest/Baseline/core.parse-only-signature-file-issues/invalid-sig-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 + diff --git a/testing/btest/Baseline/core.parse-only-signature-file-issues/missing-sig-file b/testing/btest/Baseline/core.parse-only-signature-file-issues/missing-sig-file new file mode 100644 index 0000000000..3fc89824f4 --- /dev/null +++ b/testing/btest/Baseline/core.parse-only-signature-file-issues/missing-sig-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 diff --git a/testing/btest/Baseline/core.parse-only-usage-issues/out b/testing/btest/Baseline/core.parse-only-usage-issues/out new file mode 100644 index 0000000000..d2c9e967e9 --- /dev/null +++ b/testing/btest/Baseline/core.parse-only-usage-issues/out @@ -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) diff --git a/testing/btest/core/parse-only-signature-file-issues.zeek b/testing/btest/core/parse-only-signature-file-issues.zeek new file mode 100644 index 0000000000..8a9785ec1f --- /dev/null +++ b/testing/btest/core/parse-only-signature-file-issues.zeek @@ -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 diff --git a/testing/btest/core/parse-only-usage-issues.zeek b/testing/btest/core/parse-only-usage-issues.zeek new file mode 100644 index 0000000000..7ed3b1792e --- /dev/null +++ b/testing/btest/core/parse-only-usage-issues.zeek @@ -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; + }