From ed4521af60669c872f203863bf4667d06712c6bf Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Fri, 26 Aug 2022 15:30:11 -0700 Subject: [PATCH] Add type checking to string_cat arguments --- src/strings.bif | 8 ++++++++ testing/btest/Baseline/bifs.string_utils/out | 3 +++ testing/btest/Baseline/bifs.string_utils_errors/.stderr | 6 ++++++ testing/btest/Baseline/bifs.string_utils_errors/out | 7 +++++++ testing/btest/bifs/string_utils.zeek | 4 ++++ testing/btest/bifs/string_utils_errors.zeek | 9 +++++++++ 6 files changed, 37 insertions(+) create mode 100644 testing/btest/Baseline/bifs.string_utils_errors/.stderr diff --git a/src/strings.bif b/src/strings.bif index 6df3b213a0..fb2179a604 100644 --- a/src/strings.bif +++ b/src/strings.bif @@ -64,7 +64,15 @@ function string_cat%(...%): string %{ int n = 0; for ( const auto& a : @ARG@ ) + { + if ( a->GetType()->Tag() != TYPE_STRING ) + { + zeek::reporter->Error("string_cat() requires string arguments"); + return val_mgr->EmptyString(); + } + n += a->AsString()->Len(); + } u_char* b = new u_char[n+1]; zeek::String* s = new zeek::String(1, b, n); diff --git a/testing/btest/Baseline/bifs.string_utils/out b/testing/btest/Baseline/bifs.string_utils/out index 7e51c14446..269c4a24d5 100644 --- a/testing/btest/Baseline/bifs.string_utils/out +++ b/testing/btest/Baseline/bifs.string_utils/out @@ -66,3 +66,6 @@ find_str: -1 find_str: 4 find_str: 4 +string_cat +----------------------------------------------------- +string_cat: abc diff --git a/testing/btest/Baseline/bifs.string_utils_errors/.stderr b/testing/btest/Baseline/bifs.string_utils_errors/.stderr new file mode 100644 index 0000000000..473c5df38b --- /dev/null +++ b/testing/btest/Baseline/bifs.string_utils_errors/.stderr @@ -0,0 +1,6 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error: Fill string passed to ljust() must be a single character +error: Fill string passed to rjust() must be a single character +error: find_str: end position must be greater than start position +error: find_str: end position must be greater than start position +error: string_cat() requires string arguments diff --git a/testing/btest/Baseline/bifs.string_utils_errors/out b/testing/btest/Baseline/bifs.string_utils_errors/out index de26f79cf7..677c28a06b 100644 --- a/testing/btest/Baseline/bifs.string_utils_errors/out +++ b/testing/btest/Baseline/bifs.string_utils_errors/out @@ -1,5 +1,12 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. Justification (input string 'abc') ---------------------------------- + +find_str/rfind_str (input string 'abcdefghi') +----------------------------------------------------- find_str: -1 find_str: -1 +string_cat +----------------------------------------------------- +string_cat: diff --git a/testing/btest/bifs/string_utils.zeek b/testing/btest/bifs/string_utils.zeek index 021d7f68d0..08b32d66e5 100644 --- a/testing/btest/bifs/string_utils.zeek +++ b/testing/btest/bifs/string_utils.zeek @@ -78,4 +78,8 @@ event zeek_init() print fmt("find_str: %d", rfind_str(s3, "efg")); print fmt("find_str: %d", rfind_str(s3, "efg", 2, 6)); print ""; + + print fmt("string_cat"); + print "-----------------------------------------------------"; + print fmt("string_cat: %s", string_cat("a", "b", "c")); } diff --git a/testing/btest/bifs/string_utils_errors.zeek b/testing/btest/bifs/string_utils_errors.zeek index afc26b562a..c62bbbacaa 100644 --- a/testing/btest/bifs/string_utils_errors.zeek +++ b/testing/btest/bifs/string_utils_errors.zeek @@ -4,6 +4,7 @@ # # @TEST-EXEC: zeek -b %INPUT >out # @TEST-EXEC: btest-diff out +# @TEST-EXEC: btest-diff .stderr event zeek_init() { @@ -12,8 +13,16 @@ event zeek_init() local s1 : string = "abc"; print fmt("ljust: '%s'", ljust(s1, 2, "--")); # This should return an error print fmt("rjust: '%s'", rjust(s1, 2, "--")); # This should return an error + print ""; + local s3: string = "abcdefghi"; + print fmt("find_str/rfind_str (input string '%s')", s3); + print "-----------------------------------------------------"; print fmt("find_str: %d", find_str(s3, "efg", 6, 2)); print fmt("find_str: %d", rfind_str(s3, "efg", 6, 2)); print ""; + + print fmt("string_cat"); + print "-----------------------------------------------------"; + print fmt("string_cat: %s", string_cat("a", 1, "c")); }