mirror of
https://github.com/zeek/zeek.git
synced 2025-10-17 05:58:20 +00:00
GH-598: handle multi-key sets correctly when outputting json
This commit is contained in:
parent
95489d52d8
commit
756f363185
3 changed files with 14 additions and 17 deletions
28
src/Val.cc
28
src/Val.cc
|
@ -543,28 +543,21 @@ static ZeekJson BuildJSON(Val* val, bool only_loggable=false, RE_Matcher* re=new
|
||||||
auto lv = tval->RecoverIndex(k);
|
auto lv = tval->RecoverIndex(k);
|
||||||
delete k;
|
delete k;
|
||||||
|
|
||||||
|
Val* entry_key;
|
||||||
|
if ( lv->Length() == 1 )
|
||||||
|
entry_key = lv->Index(0)->Ref();
|
||||||
|
else
|
||||||
|
entry_key = lv->Ref();
|
||||||
|
|
||||||
|
ZeekJson key_json = BuildJSON(entry_key, only_loggable, re);
|
||||||
|
|
||||||
if ( tval->Type()->IsSet() )
|
if ( tval->Type()->IsSet() )
|
||||||
{
|
{
|
||||||
auto* value = lv->Index(0)->Ref();
|
j.push_back(key_json);
|
||||||
j.push_back(BuildJSON(value, only_loggable, re));
|
|
||||||
Unref(value);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ZeekJson key_json;
|
Val* entry_value = tval->Lookup(entry_key, true);
|
||||||
Val* entry_value;
|
|
||||||
if ( lv->Length() == 1 )
|
|
||||||
{
|
|
||||||
Val* entry_key = lv->Index(0)->Ref();
|
|
||||||
entry_value = tval->Lookup(entry_key, true);
|
|
||||||
key_json = BuildJSON(entry_key, only_loggable, re);
|
|
||||||
Unref(entry_key);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
entry_value = tval->Lookup(lv, true);
|
|
||||||
key_json = BuildJSON(lv, only_loggable, re);
|
|
||||||
}
|
|
||||||
|
|
||||||
string key_string;
|
string key_string;
|
||||||
if ( key_json.is_string() )
|
if ( key_json.is_string() )
|
||||||
|
@ -575,6 +568,7 @@ static ZeekJson BuildJSON(Val* val, bool only_loggable=false, RE_Matcher* re=new
|
||||||
j[key_string] = BuildJSON(entry_value, only_loggable, re);
|
j[key_string] = BuildJSON(entry_value, only_loggable, re);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Unref(entry_key);
|
||||||
Unref(lv);
|
Unref(lv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ true
|
||||||
["1.2.3.4"]
|
["1.2.3.4"]
|
||||||
[{"s":"test"}]
|
[{"s":"test"}]
|
||||||
[{"s":"test"}]
|
[{"s":"test"}]
|
||||||
|
[["three",3],["one",1],["two",2]]
|
||||||
{}
|
{}
|
||||||
{"2":"10.2.2.2","1":"10.1.1.1"}
|
{"2":"10.2.2.2","1":"10.1.1.1"}
|
||||||
{"10.1.1.1":{"a":1},"10.2.2.2":{"b":2}}
|
{"10.1.1.1":{"a":1},"10.2.2.2":{"b":2}}
|
||||||
|
|
|
@ -105,11 +105,13 @@ event zeek_init()
|
||||||
local st3: set[addr] = set(1.2.3.4);
|
local st3: set[addr] = set(1.2.3.4);
|
||||||
local st4: set[myrec1] = set(myrec1($s="test"));
|
local st4: set[myrec1] = set(myrec1($s="test"));
|
||||||
local st5: set[myrec1] = set(myrec1($s="test", $c=2));
|
local st5: set[myrec1] = set(myrec1($s="test", $c=2));
|
||||||
|
local st6: set[string, count] = { ["one", 1], ["two", 2], ["three", 3] };
|
||||||
print to_json(st1);
|
print to_json(st1);
|
||||||
print to_json(st2);
|
print to_json(st2);
|
||||||
print to_json(st3);
|
print to_json(st3);
|
||||||
print to_json(st4);
|
print to_json(st4);
|
||||||
print to_json(st5, T);
|
print to_json(st5, T);
|
||||||
|
print to_json(st6);
|
||||||
|
|
||||||
# Tables
|
# Tables
|
||||||
local ta1: table[count] of addr = table();
|
local ta1: table[count] of addr = table();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue