From 44b657687a2198ab59a5598eeaf2c22ad54f3b87 Mon Sep 17 00:00:00 2001 From: Johanna Amann Date: Wed, 26 Jun 2019 11:41:39 -0700 Subject: [PATCH] Fix creating a StringVal from std::string. Currently, creating a StringVal from a std::string did not work with data that contains \0 characters. This easy fix changes this - and should also lead to a small speed increase for code using this constructor. This obviously means that more data might copied now in some cases that were previously cut off at the first 0-byte. Our test-suite did not reveal any such cases. --- src/Val.cc | 2 +- testing/btest/Baseline/language.paraglob/out | 2 +- testing/btest/language/paraglob.zeek | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Val.cc b/src/Val.cc index 017516acd8..32d64c5cdd 100644 --- a/src/Val.cc +++ b/src/Val.cc @@ -710,7 +710,7 @@ StringVal::StringVal(const char* s) : Val(TYPE_STRING) StringVal::StringVal(const string& s) : Val(TYPE_STRING) { - val.string_val = new BroString(s.c_str()); + val.string_val = new BroString(reinterpret_cast(s.data()), s.length(), 1); } StringVal* StringVal::ToUpper() diff --git a/testing/btest/Baseline/language.paraglob/out b/testing/btest/Baseline/language.paraglob/out index 18e6da7096..12fd09a970 100644 --- a/testing/btest/Baseline/language.paraglob/out +++ b/testing/btest/Baseline/language.paraglob/out @@ -5,5 +5,5 @@ F [once] [] [*.gov*, *malware*] -[z*ro] +[z*ro, zero\x00zero] [*.gov*, *malware*] diff --git a/testing/btest/language/paraglob.zeek b/testing/btest/language/paraglob.zeek index b6f61a8ef0..e608bd62e0 100644 --- a/testing/btest/language/paraglob.zeek +++ b/testing/btest/language/paraglob.zeek @@ -6,7 +6,7 @@ event zeek_init () local v1 = vector("*", "d?g", "*og", "d?", "d[!wl]g"); local v2 = vector("once", "!o*", "once"); local v3 = vector("https://*.google.com/*", "*malware*", "*.gov*"); - local v4 = vector("z*ro"); + local v4 = vector("z*ro", "zero\0zero"); local p1 = paraglob_init(v1); local p2: opaque of paraglob = paraglob_init(v2);