From ac0b09d1a457726aad4ceafe1bf192b991bf4470 Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Fri, 5 Feb 2021 14:46:47 -0800 Subject: [PATCH] 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). --- src/zeek-setup.cc | 9 +++------ .../invalid-sig-file | 3 +++ .../missing-sig-file | 2 ++ .../Baseline/core.parse-only-usage-issues/out | 2 ++ .../core/parse-only-signature-file-issues.zeek | 15 +++++++++++++++ testing/btest/core/parse-only-usage-issues.zeek | 9 +++++++++ 6 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 testing/btest/Baseline/core.parse-only-signature-file-issues/invalid-sig-file create mode 100644 testing/btest/Baseline/core.parse-only-signature-file-issues/missing-sig-file create mode 100644 testing/btest/Baseline/core.parse-only-usage-issues/out create mode 100644 testing/btest/core/parse-only-signature-file-issues.zeek create mode 100644 testing/btest/core/parse-only-usage-issues.zeek 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; + }