Merge remote-tracking branch 'origin/topic/robin/gh-4250-vec-allocator'

* origin/topic/robin/gh-4250-vec-allocator:
  Spicy: Fix passing vectors to Zeek.
This commit is contained in:
Robin Sommer 2025-03-18 09:07:40 +01:00
commit 3d25328204
No known key found for this signature in database
GPG key ID: D8187293B3FFE5D0
5 changed files with 35 additions and 8 deletions

15
CHANGES
View file

@ -1,3 +1,18 @@
7.2.0-dev.325 | 2025-03-18 09:07:40 +0100
* GH-4250: Spicy: Fix passing vectors to Zeek. (Robin Sommer, Corelight)
We missed the allocator argument for the C++-side conversion
template, which let vector's of certain types not compile.
* [Spicy] Add missing `to_string` overload. (Robin Sommer, Corelight)
* Bump Spicy. (Robin Sommer, Corelight)
This includes a fix to adapt to Spicy-side changes.
* Bump `cmake` submodule. (Robin Sommer, Corelight)
7.2.0-dev.318 | 2025-03-17 11:55:11 -0700 7.2.0-dev.318 | 2025-03-17 11:55:11 -0700
* ci/init-external-repo.sh: Use regex to match macos cirrus task (Arne Welzel, Corelight) * ci/init-external-repo.sh: Use regex to match macos cirrus task (Arne Welzel, Corelight)

View file

@ -1 +1 @@
7.2.0-dev.318 7.2.0-dev.325

View file

@ -502,8 +502,8 @@ template<typename K, typename V>
ValPtr to_val(const hilti::rt::Map<K, V>& s, const TypePtr& target); ValPtr to_val(const hilti::rt::Map<K, V>& s, const TypePtr& target);
template<typename T> template<typename T>
ValPtr to_val(const hilti::rt::Set<T>& s, const TypePtr& target); ValPtr to_val(const hilti::rt::Set<T>& s, const TypePtr& target);
template<typename T> template<typename T, typename Allocator>
ValPtr to_val(const hilti::rt::Vector<T>& v, const TypePtr& target); ValPtr to_val(const hilti::rt::Vector<T, Allocator>& v, const TypePtr& target);
template<typename T> template<typename T>
ValPtr to_val(const std::optional<T>& t, const TypePtr& target); ValPtr to_val(const std::optional<T>& t, const TypePtr& target);
template<typename T, typename E> template<typename T, typename E>
@ -695,8 +695,8 @@ inline ValPtr to_val(const hilti::rt::Time& t, const TypePtr& target) {
* Converts a Spicy-side vector to a Zeek value. The result is returned with * Converts a Spicy-side vector to a Zeek value. The result is returned with
* ref count +1. * ref count +1.
*/ */
template<typename T> template<typename T, typename Allocator>
inline ValPtr to_val(const hilti::rt::Vector<T>& v, const TypePtr& target) { inline ValPtr to_val(const hilti::rt::Vector<T, Allocator>& v, const TypePtr& target) {
if ( target->Tag() != TYPE_VECTOR && target->Tag() != TYPE_LIST ) if ( target->Tag() != TYPE_VECTOR && target->Tag() != TYPE_LIST )
throw ParameterMismatch("expected vector or list", target); throw ParameterMismatch("expected vector or list", target);

View file

@ -1,5 +1,5 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[$a=b"SSH-2", $b=11824, $c=11599, $d=3.14, $e=1.2.3.4, $f=2001:db8::1428:57ab, $g=True, $h="MyString", $i=2011-01-19T05:31:50.500000000Z, $j=4.000000s, $r=[$i=11, $s=(not set)], $s={1, 2, 3}, $t=(47, "foo"), $v=[b"A", b"B", b"C"], $l=[b"A", b"B", b"C"], $m={1: "A", 2: "B", 3: "C"}] [$a=b"SSH-2", $b=11824, $c=11599, $d=3.14, $e=1.2.3.4, $f=2001:db8::1428:57ab, $g=True, $h="MyString", $i=2011-01-19T05:31:50.500000000Z, $j=4.000000s, $k=Enum::B, $r=[$i=11, $s=(not set)], $s={1, 2, 3}, $t=(47, "foo"), $v=[b"A", b"B", b"C"], $l=[b"A", b"B", b"C"], $m={1: "A", 2: "B", 3: "C"}, $n=[Enum::A, Enum::B]]
[orig_h=192.150.186.169, orig_p=49244/tcp, resp_h=131.159.14.23, resp_p=22/tcp, proto=6] [orig_h=192.150.186.169, orig_p=49244/tcp, resp_h=131.159.14.23, resp_p=22/tcp, proto=6]
T T
SSH-2 SSH-2
@ -12,6 +12,7 @@ T
MyString MyString
XXXXXXXXXX.XXXXXX XXXXXXXXXX.XXXXXX
4.000000, interval 4.000000, interval
Conv::Enum_B
[i=11, s=<uninitialized>] [i=11, s=<uninitialized>]
{ {
2, 2,
@ -26,3 +27,4 @@ XXXXXXXXXX.XXXXXX
[1] = A, [1] = A,
[3] = C [3] = C
} }
[Conv::Enum_A, Conv::Enum_B]

View file

@ -12,6 +12,8 @@ event zeek_init() {
module Conv; module Conv;
public type Enum = enum { A, B = 2, C };
public type Test = unit { public type Test = unit {
a: bytes &size=5; a: bytes &size=5;
b: int16; b: int16;
@ -23,6 +25,7 @@ public type Test = unit {
h: bytes &size=1 &convert="MyString"; h: bytes &size=1 &convert="MyString";
i: bytes &size=1 &convert=time(1295415110.5); i: bytes &size=1 &convert=time(1295415110.5);
j: bytes &size=1 &convert=interval(4.0); j: bytes &size=1 &convert=interval(4.0);
k: bytes &size=1 &convert=Enum(2);
var r: MyStruct = [$i = 11]; var r: MyStruct = [$i = 11];
var s: set<uint64> = set<uint64>(1,2,3); var s: set<uint64> = set<uint64>(1,2,3);
@ -30,6 +33,7 @@ public type Test = unit {
var v: vector<bytes> = vector<bytes>(b"A", b"B", b"C"); var v: vector<bytes> = vector<bytes>(b"A", b"B", b"C");
var l: vector<bytes> = vector<bytes>(b"A", b"B", b"C"); var l: vector<bytes> = vector<bytes>(b"A", b"B", b"C");
var m: map<int64, string> = map(1: "A", 2: "B", 3: "C"); var m: map<int64, string> = map(1: "A", 2: "B", 3: "C");
var n: vector<Enum> = [Enum::A, Enum::B];
on %done { print self; } on %done { print self; }
}; };
@ -59,12 +63,14 @@ on Conv::Test -> event conv::test($conn,
self.h, self.h,
self.i, self.i,
self.j, self.j,
self.k,
self.r, self.r,
self.s, self.s,
self.t, self.t,
self.v, self.v,
self.l, self.l,
self.m self.m,
self.n
); );
@TEST-END-FILE @TEST-END-FILE
@ -86,12 +92,14 @@ event conv::test(x: connection,
h: string, h: string,
i: time, i: time,
j: interval, j: interval,
k: Conv::Enum,
r: MyRecord, r: MyRecord,
s: set[count], s: set[count],
t: MyRecord, t: MyRecord,
v: vector of string, v: vector of string,
l: vector of string, l: vector of string,
m: table[int] of string m: table[int] of string,
n: vector of Conv::Enum
) )
{ {
print x$id; print x$id;
@ -106,10 +114,12 @@ event conv::test(x: connection,
print h; print h;
print i; print i;
print fmt("%f", j), type_name(j); # print as float as interval format differs between versions print fmt("%f", j), type_name(j); # print as float as interval format differs between versions
print k;
print r; print r;
print s; print s;
print t; print t;
print v; print v;
print l; print l;
print m; print m;
print n;
} }