Format tables indexed by patterns consistently across 32-bit/64-bit

Uses a full 64 bit integer for length values regardless of actual size_t
to get consistent results between either 32-bit and 64-bit platforms.
This commit is contained in:
Jon Siwek 2020-02-14 21:18:07 -08:00
parent a8e137a879
commit 8e353aafe5

View file

@ -156,10 +156,10 @@ char* CompositeHash::SingleValHash(int type_check, char* kp0,
v->AsPattern()->AnywherePatternText() v->AsPattern()->AnywherePatternText()
}; };
size_t* kp; uint64_t* kp;
for ( int i = 0; i < 2; i++ ) for ( int i = 0; i < 2; i++ )
{ {
kp = AlignAndPadType<size_t>(kp0+i); kp = AlignAndPadType<uint64_t>(kp0+i);
*kp = strlen(texts[i]) + 1; *kp = strlen(texts[i]) + 1;
} }
@ -507,7 +507,7 @@ int CompositeHash::SingleTypeKeySize(BroType* bt, const Val* v,
if ( ! v ) if ( ! v )
return (optional && ! calc_static_size) ? sz : 0; return (optional && ! calc_static_size) ? sz : 0;
sz = SizeAlign(sz, 2 * sizeof(size_t)); sz = SizeAlign(sz, 2 * sizeof(uint64_t));
sz += strlen(v->AsPattern()->PatternText()) sz += strlen(v->AsPattern()->PatternText())
+ strlen(v->AsPattern()->AnywherePatternText()) + 2; // 2 for null terminators + strlen(v->AsPattern()->AnywherePatternText()) + 2; // 2 for null terminators
break; break;
@ -894,7 +894,7 @@ const char* CompositeHash::RecoverOneVal(const HashKey* k, const char* kp0,
} }
else else
{ {
const size_t* const len = AlignType<size_t>(kp0); const uint64_t* const len = AlignType<uint64_t>(kp0);
kp1 = reinterpret_cast<const char*>(len+2); kp1 = reinterpret_cast<const char*>(len+2);
re = new RE_Matcher(kp1, kp1 + len[0]); re = new RE_Matcher(kp1, kp1 + len[0]);