mirror of
https://github.com/zeek/zeek.git
synced 2025-10-03 15:18:20 +00:00
Fixing ASCII logger to escape the unset-field place-holder if written
out literally.
This commit is contained in:
parent
5fae0482a9
commit
ebd15cf12e
5 changed files with 60 additions and 4 deletions
5
CHANGES
5
CHANGES
|
@ -1,4 +1,9 @@
|
||||||
|
|
||||||
|
2.0-beta-69 | 2011-11-29 16:55:31 -0800
|
||||||
|
|
||||||
|
* Fixing ASCII logger to escape the unset-field place holder if
|
||||||
|
written out literally. (Robin Sommer)
|
||||||
|
|
||||||
2.0-beta-68 | 2011-11-29 15:23:12 -0800
|
2.0-beta-68 | 2011-11-29 15:23:12 -0800
|
||||||
|
|
||||||
* Lots of documentation polishing. (Jon Siwek)
|
* Lots of documentation polishing. (Jon Siwek)
|
||||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
2.0-beta-68
|
2.0-beta-69
|
||||||
|
|
|
@ -200,13 +200,36 @@ bool LogWriterAscii::DoWriteOne(ODesc* desc, LogVal* val, const LogField* field)
|
||||||
case TYPE_FUNC:
|
case TYPE_FUNC:
|
||||||
{
|
{
|
||||||
int size = val->val.string_val->size();
|
int size = val->val.string_val->size();
|
||||||
if ( size )
|
const char* data = val->val.string_val->data();
|
||||||
desc->AddN(val->val.string_val->data(), val->val.string_val->size());
|
|
||||||
else
|
if ( ! size )
|
||||||
|
{
|
||||||
desc->AddN(empty_field, empty_field_len);
|
desc->AddN(empty_field, empty_field_len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( size == unset_field_len && memcmp(data, unset_field, size) == 0 )
|
||||||
|
{
|
||||||
|
// The value we'd write out would match exactly the
|
||||||
|
// place-holder we use for unset optional fields. We
|
||||||
|
// escape the first character so that the output
|
||||||
|
// won't be ambigious.
|
||||||
|
static const char hex_chars[] = "0123456789abcdef";
|
||||||
|
char hex[6] = "\\x00";
|
||||||
|
hex[2] = hex_chars[((*data) & 0xf0) >> 4];
|
||||||
|
hex[3] = hex_chars[(*data) & 0x0f];
|
||||||
|
desc->AddRaw(hex, 4);
|
||||||
|
|
||||||
|
++data;
|
||||||
|
--size;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( size )
|
||||||
|
desc->AddN(data, size);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case TYPE_TABLE:
|
case TYPE_TABLE:
|
||||||
{
|
{
|
||||||
if ( ! val->val.set_val.size )
|
if ( ! val->val.set_val.size )
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#separator \x09
|
||||||
|
#path test
|
||||||
|
#fields x y z
|
||||||
|
#types string string string
|
||||||
|
\x2d - -
|
|
@ -0,0 +1,23 @@
|
||||||
|
#
|
||||||
|
# @TEST-EXEC: bro -b %INPUT
|
||||||
|
# @TEST-EXEC: btest-diff test.log
|
||||||
|
|
||||||
|
module Test;
|
||||||
|
|
||||||
|
export {
|
||||||
|
redef enum Log::ID += { LOG };
|
||||||
|
|
||||||
|
type Log: record {
|
||||||
|
x: string &optional;
|
||||||
|
y: string &optional;
|
||||||
|
z: string &optional;
|
||||||
|
} &log;
|
||||||
|
}
|
||||||
|
|
||||||
|
event bro_init()
|
||||||
|
{
|
||||||
|
Log::create_stream(Test::LOG, [$columns=Log]);
|
||||||
|
Log::write(Test::LOG, [$x=LogAscii::unset_field, $z=""]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue