diff --git a/src/CompHash.cc b/src/CompHash.cc index 327778c5c5..6fbe765e08 100644 --- a/src/CompHash.cc +++ b/src/CompHash.cc @@ -401,6 +401,21 @@ HashKey* CompositeHash::ComputeSingletonHash(const Val* v, int type_check) const if ( v->Type()->Tag() == TYPE_FUNC ) return new HashKey(v->AsFunc()->GetUniqueFuncID()); + if (v->Type()->Tag() == TYPE_PATTERN) { + char* texts[2] = { + v->AsPattern()->PatternText(), + v->AsPattern()->AnywherePatternText() + }; + + char key [ sizeof(size_t) * 2 + strlen(texts[0]) + strlen(texts[1]) ]; + std::memcpy(key, strlen(texts[0]), sizeof(size_t)); + std::memcpy(*(key + sizeof(size_t)), strlen(texts[1]), sizeof(size_t)); + std::memcpy(key + 2 * sizeof(size_t), texts[0], strlen(texts[0])); + std::memcpy(key + 2 * sizeof(size_t) + strlen(texts[0]), texts[1], strlen(texts[1])); + + return new HashKey(key); + } + reporter->InternalError("bad index type in CompositeHash::ComputeSingletonHash"); return 0; diff --git a/src/Type.cc b/src/Type.cc index c3e12f5a29..975cf9eb88 100644 --- a/src/Type.cc +++ b/src/Type.cc @@ -391,7 +391,7 @@ TableType::TableType(TypeList* ind, BroType* yield) // Allow functions, since they can be compared // for Func* pointer equality. if ( t == TYPE_INTERNAL_OTHER && tli->Tag() != TYPE_FUNC && - tli->Tag() != TYPE_RECORD ) + tli->Tag() != TYPE_RECORD && tli->Tag() != TYPE_PATTERN) { tli->Error("bad index type"); SetError();