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:
Robin Sommer 2018-04-27 10:35:37 -07:00
commit 8df77aee09
13 changed files with 114 additions and 6 deletions

View file

@ -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]

View 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;