From 551a7d7394468823aa0c6139f03176524e5b28a9 Mon Sep 17 00:00:00 2001 From: Johanna Amann Date: Thu, 22 Oct 2015 13:08:47 -0700 Subject: [PATCH] Make join_string_vec work with vectors containing empty elements. Without this patch, this scenario results in a segmentation fault. I opted to keep the separator present for non-existing elements. Hence, a vector a, [empty], b with separator "|" will result in a||b --- src/strings.bif | 8 +++++++- testing/btest/Baseline/bifs.join_string/out | 1 + testing/btest/bifs/join_string.bro | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/strings.bif b/src/strings.bif index 80b60a57d0..ebee7d9cf7 100644 --- a/src/strings.bif +++ b/src/strings.bif @@ -216,7 +216,13 @@ function join_string_vec%(vec: string_vec, sep: string%): string if ( i > 0 ) d.Add(sep->CheckString(), 0); - v->Lookup(i)->Describe(&d); + Val* e = v->Lookup(i); + + // If the element is empty, skip it. + if ( ! e ) + continue; + + e->Describe(&d); } BroString* s = new BroString(1, d.TakeBytes(), d.Len()); diff --git a/testing/btest/Baseline/bifs.join_string/out b/testing/btest/Baseline/bifs.join_string/out index f1640a57ee..e916fc304a 100644 --- a/testing/btest/Baseline/bifs.join_string/out +++ b/testing/btest/Baseline/bifs.join_string/out @@ -4,3 +4,4 @@ mytest this__is__another__test thisisanothertest Test +...hi..there diff --git a/testing/btest/bifs/join_string.bro b/testing/btest/bifs/join_string.bro index 83917ef322..0b2d94029a 100644 --- a/testing/btest/bifs/join_string.bro +++ b/testing/btest/bifs/join_string.bro @@ -10,6 +10,9 @@ event bro_init() local b: string_array = { [1] = "mytest" }; local c: string_vec = vector( "this", "is", "another", "test" ); local d: string_vec = vector( "Test" ); + local e: string_vec = vector(); + e[3] = "hi"; + e[5] = "there"; print join_string_array(" * ", a); print join_string_array("", a); @@ -18,4 +21,5 @@ event bro_init() print join_string_vec(c, "__"); print join_string_vec(c, ""); print join_string_vec(d, "-"); + print join_string_vec(e, "."); }