mirror of
https://github.com/zeek/zeek.git
synced 2025-10-16 05:28:20 +00:00
Merge remote-tracking branch 'origin/topic/jsiwek/bit-1909'
I've moved the resizing loop into a static method of RecordVal. * origin/topic/jsiwek/bit-1909: BIT-1909: fix invalid redef'd record field accesses
This commit is contained in:
commit
8df77aee09
13 changed files with 114 additions and 6 deletions
|
@ -0,0 +1,10 @@
|
|||
[a=redef, d=<uninitialized>, e=<uninitialized>, f=<uninitialized>, g=<uninitialized>, h=<uninitialized>, i=<uninitialized>, j=<uninitialized>, k=<uninitialized>, l=<uninitialized>, m=<uninitialized>, n=<uninitialized>, o=<uninitialized>, p=<uninitialized>, q=<uninitialized>]
|
||||
[a=runtime, d=<uninitialized>, e=<uninitialized>, f=<uninitialized>, g=<uninitialized>, h=<uninitialized>, i=<uninitialized>, j=<uninitialized>, k=<uninitialized>, l=<uninitialized>, m=<uninitialized>, n=<uninitialized>, o=<uninitialized>, p=<uninitialized>, q=OPTQ]
|
||||
[a=local, d=<uninitialized>, e=<uninitialized>, f=<uninitialized>, g=<uninitialized>, h=<uninitialized>, i=<uninitialized>, j=<uninitialized>, k=<uninitialized>, l=<uninitialized>, m=<uninitialized>, n=<uninitialized>, o=<uninitialized>, p=<uninitialized>, q=OPTQ]
|
||||
[a=redef, d=<uninitialized>, e=<uninitialized>, f=<uninitialized>, g=<uninitialized>, h=<uninitialized>, i=<uninitialized>, j=<uninitialized>, k=<uninitialized>, l=<uninitialized>, m=<uninitialized>, n=<uninitialized>, o=<uninitialized>, p=<uninitialized>, q=<uninitialized>]
|
||||
[a=redef, d=<uninitialized>, e=<uninitialized>, f=<uninitialized>, g=<uninitialized>, h=<uninitialized>, i=<uninitialized>, j=<uninitialized>, k=<uninitialized>, l=<uninitialized>, m=<uninitialized>, n=<uninitialized>, o=<uninitialized>, p=<uninitialized>, q=<uninitialized>]
|
||||
newp
|
||||
[a=redef, d=<uninitialized>, e=<uninitialized>, f=<uninitialized>, g=<uninitialized>, h=<uninitialized>, i=<uninitialized>, j=<uninitialized>, k=<uninitialized>, l=<uninitialized>, m=<uninitialized>, n=<uninitialized>, o=<uninitialized>, p=newp, q=<uninitialized>]
|
||||
OPTQ
|
||||
our value
|
||||
[a=redef, d=<uninitialized>, e=<uninitialized>, f=<uninitialized>, g=<uninitialized>, h=<uninitialized>, i=<uninitialized>, j=<uninitialized>, k=<uninitialized>, l=<uninitialized>, m=<uninitialized>, n=<uninitialized>, o=<uninitialized>, p=newp, q=our value]
|
52
testing/btest/language/record-redef-after-init.bro
Normal file
52
testing/btest/language/record-redef-after-init.bro
Normal file
|
@ -0,0 +1,52 @@
|
|||
# @TEST-EXEC: bro -b %INPUT >output
|
||||
# @TEST-EXEC: btest-diff output
|
||||
|
||||
type myrec: record {
|
||||
a: string;
|
||||
};
|
||||
|
||||
const mr = myrec($a = "init") &redef;
|
||||
|
||||
redef mr = myrec($a = "redef");
|
||||
|
||||
# Many fields may help ensure out-of-bounds reference failures
|
||||
redef record myrec += {
|
||||
d: string &optional;
|
||||
e: string &optional;
|
||||
f: string &optional;
|
||||
g: string &optional;
|
||||
h: string &optional;
|
||||
i: string &optional;
|
||||
j: string &optional;
|
||||
k: string &optional;
|
||||
l: string &optional;
|
||||
m: string &optional;
|
||||
n: string &optional;
|
||||
o: string &optional;
|
||||
p: string &optional;
|
||||
q: string &default="OPTQ";
|
||||
};
|
||||
|
||||
print mr; # original 'myrec' type with updated a value
|
||||
print myrec($a = "runtime"); # check we get new defaults
|
||||
|
||||
local mr2 = myrec($a = "local");
|
||||
print mr2;
|
||||
|
||||
mr2 = mr; # Copying should do the right thing
|
||||
print mr2;
|
||||
|
||||
local mr3: myrec = mr; # Initializing should do the right thing
|
||||
print mr3;
|
||||
|
||||
if ( mr?$q ) # the test that did not work properly
|
||||
{
|
||||
print mr$q; # accessed invalid memory location
|
||||
}
|
||||
mr$p = "newp"; # Assignment updates mr as much as needed
|
||||
print mr$p;
|
||||
print mr;
|
||||
print mr$q;
|
||||
mr$q = "our value";
|
||||
print mr$q;
|
||||
print mr;
|
Loading…
Add table
Add a link
Reference in a new issue