Fix for the CompHash fix.

This commit is contained in:
Robin Sommer 2011-08-19 19:00:15 -07:00
parent 5dc96146f3
commit 03d41818e0
4 changed files with 18 additions and 10 deletions

View file

@ -1,4 +1,8 @@
1.6-dev-1120 | 2011-08-19 19:00:15 -0700
* Fix for the CompHash fix. (Robin Sommer)
1.6-dev-1118 | 2011-08-18 14:11:55 -0700 1.6-dev-1118 | 2011-08-18 14:11:55 -0700
* Fixing key size calculation in composite hash code. (Robin Sommer) * Fixing key size calculation in composite hash code. (Robin Sommer)

View file

@ -1 +1 @@
1.6-dev-1118 1.6-dev-1120

View file

@ -47,7 +47,7 @@ CompositeHash::CompositeHash(TypeList* composite_type)
else else
{ {
size = ComputeKeySize(); size = ComputeKeySize(0, 1, true);
if ( size > 0 ) if ( size > 0 )
// Fixed size. Make sure what we get is fully aligned. // Fixed size. Make sure what we get is fully aligned.
@ -244,7 +244,7 @@ HashKey* CompositeHash::ComputeHash(const Val* v, int type_check) const
if ( ! k ) if ( ! k )
{ {
int sz = ComputeKeySize(v, type_check); int sz = ComputeKeySize(v, type_check, false);
if ( sz == 0 ) if ( sz == 0 )
return 0; return 0;
@ -331,7 +331,8 @@ HashKey* CompositeHash::ComputeSingletonHash(const Val* v, int type_check) const
} }
int CompositeHash::SingleTypeKeySize(BroType* bt, const Val* v, int CompositeHash::SingleTypeKeySize(BroType* bt, const Val* v,
int type_check, int sz, bool optional) const int type_check, int sz, bool optional,
bool calc_static_size) const
{ {
InternalTypeTag t = bt->InternalType(); InternalTypeTag t = bt->InternalType();
@ -393,7 +394,8 @@ int CompositeHash::SingleTypeKeySize(BroType* bt, const Val* v,
sz = SingleTypeKeySize(rt->FieldType(i), sz = SingleTypeKeySize(rt->FieldType(i),
rv ? rv->Lookup(i) : 0, rv ? rv->Lookup(i) : 0,
type_check, sz, v && optional); type_check, sz, optional,
calc_static_size);
if ( ! sz ) if ( ! sz )
return 0; return 0;
} }
@ -408,7 +410,7 @@ int CompositeHash::SingleTypeKeySize(BroType* bt, const Val* v,
case TYPE_INTERNAL_STRING: case TYPE_INTERNAL_STRING:
if ( ! v ) if ( ! v )
return optional ? sz : 0; return (optional && ! calc_static_size) ? sz : 0;
// Factor in length field. // Factor in length field.
sz = SizeAlign(sz, sizeof(int)); sz = SizeAlign(sz, sizeof(int));
@ -422,7 +424,7 @@ int CompositeHash::SingleTypeKeySize(BroType* bt, const Val* v,
return sz; return sz;
} }
int CompositeHash::ComputeKeySize(const Val* v, int type_check) const int CompositeHash::ComputeKeySize(const Val* v, int type_check, bool calc_static_size) const
{ {
const type_list* tl = type->Types(); const type_list* tl = type->Types();
const val_list* vl = 0; const val_list* vl = 0;
@ -440,7 +442,7 @@ int CompositeHash::ComputeKeySize(const Val* v, int type_check) const
loop_over_list(*tl, i) loop_over_list(*tl, i)
{ {
sz = SingleTypeKeySize((*tl)[i], v ? v->AsListVal()->Index(i) : 0, sz = SingleTypeKeySize((*tl)[i], v ? v->AsListVal()->Index(i) : 0,
type_check, sz, false); type_check, sz, false, calc_static_size);
if ( ! sz ) if ( ! sz )
return 0; return 0;
} }

View file

@ -74,10 +74,12 @@ protected:
// the value is computed for the particular list of values. // the value is computed for the particular list of values.
// Returns 0 if the key has an indeterminant size (if v not given), // Returns 0 if the key has an indeterminant size (if v not given),
// or if v doesn't match the index type (if given). // or if v doesn't match the index type (if given).
int ComputeKeySize(const Val* v = 0, int type_check = 1) const; int ComputeKeySize(const Val* v, int type_check,
bool calc_static_size) const;
int SingleTypeKeySize(BroType*, const Val*, int SingleTypeKeySize(BroType*, const Val*,
int type_check, int sz, bool optional) const; int type_check, int sz, bool optional,
bool calc_static_size) const;
TypeList* type; TypeList* type;
char* key; // space for composite key char* key; // space for composite key