mirror of
https://github.com/zeek/zeek.git
synced 2025-10-13 12:08:20 +00:00

If the input framework was used to read event streams and those streams contained records with more than one field, not all elements of the threading Values were cleaned up. The reason for this is, that the SendEventStreamEvent function returned the number of record elements in the outmost record instead of the number of unrolled elements in the whole vector. This number is later used to determine how many objects to delete. Also - add a whole bunch of leak checks for the input framework that would have caught that and should cover quite a number of use-cases.
68 lines
1.5 KiB
Text
68 lines
1.5 KiB
Text
# Needs perftools support.
|
|
#
|
|
# @TEST-GROUP: leaks
|
|
#
|
|
# @TEST-REQUIRES: bro --help 2>&1 | grep -q mem-leaks
|
|
#
|
|
# @TEST-EXEC: cp input1.log input.log
|
|
# @TEST-EXEC: HEAP_CHECK_DUMP_DIRECTORY=. HEAPCHECK=local btest-bg-run bro bro -m -b %INPUT
|
|
# @TEST-EXEC: sleep 5
|
|
# @TEST-EXEC: cat input2.log >> input.log
|
|
# @TEST-EXEC: sleep 5
|
|
# @TEST-EXEC: cat input3.log >> input.log
|
|
# @TEST-EXEC: btest-bg-wait 10
|
|
|
|
redef exit_only_after_terminate = T;
|
|
|
|
@TEST-START-FILE input1.log
|
|
sdfkh:KH;fdkncv;ISEUp34:Fkdj;YVpIODhfDF
|
|
@TEST-END-FILE
|
|
|
|
@TEST-START-FILE input2.log
|
|
DSF"DFKJ"SDFKLh304yrsdkfj@#(*U$34jfDJup3UF
|
|
q3r3057fdf
|
|
@TEST-END-FILE
|
|
|
|
@TEST-START-FILE input3.log
|
|
sdfs\d
|
|
|
|
dfsdf
|
|
sdf
|
|
3rw43wRRERLlL#RWERERERE.
|
|
@TEST-END-FILE
|
|
|
|
@load base/frameworks/communication # let network-time run
|
|
|
|
module A;
|
|
|
|
type Val: record {
|
|
s: string;
|
|
};
|
|
|
|
global try: count;
|
|
global outfile: file;
|
|
|
|
event line(description: Input::EventDescription, tpe: Input::Event, s: string)
|
|
{
|
|
print outfile, description$name;
|
|
print outfile, tpe;
|
|
print outfile, s;
|
|
|
|
try = try + 1;
|
|
if ( try == 16 )
|
|
{
|
|
print outfile, "done";
|
|
close(outfile);
|
|
Input::remove("input");
|
|
Input::remove("tail");
|
|
terminate();
|
|
}
|
|
}
|
|
|
|
event bro_init()
|
|
{
|
|
outfile = open("../out");
|
|
try = 0;
|
|
Input::add_event([$source="../input.log", $reader=Input::READER_RAW, $mode=Input::STREAM, $name="input", $fields=Val, $ev=line, $want_record=F]);
|
|
Input::add_event([$source="tail -f ../input.log |", $reader=Input::READER_RAW, $mode=Input::STREAM, $name="tail", $fields=Val, $ev=line, $want_record=F]);
|
|
}
|