fixes for now-incorrect assumption that GetField always returns an existing ValPtr

This commit is contained in:
Vern Paxson 2021-02-27 08:34:38 -08:00
parent 3a59bc1a37
commit 2f47cce8a6
3 changed files with 10 additions and 8 deletions

View file

@ -184,7 +184,7 @@ char* CompositeHash::SingleValHash(bool type_check, char* kp0,
for ( int i = 0; i < num_fields; ++i ) for ( int i = 0; i < num_fields; ++i )
{ {
auto rv_i = rv->GetField(i).get(); auto rv_i = rv->GetField(i);
Attributes* a = rt->FieldDecl(i)->attrs.get(); Attributes* a = rt->FieldDecl(i)->attrs.get();
bool optional = (a && a->Find(ATTR_OPTIONAL)); bool optional = (a && a->Find(ATTR_OPTIONAL));
@ -194,7 +194,7 @@ char* CompositeHash::SingleValHash(bool type_check, char* kp0,
if ( ! (kp = SingleValHash(type_check, kp, if ( ! (kp = SingleValHash(type_check, kp,
rt->GetFieldType(i).get(), rt->GetFieldType(i).get(),
rv_i, optional)) ) rv_i.get(), optional)) )
return nullptr; return nullptr;
} }
@ -517,8 +517,9 @@ int CompositeHash::SingleTypeKeySize(Type* bt, const Val* v,
Attributes* a = rt->FieldDecl(i)->attrs.get(); Attributes* a = rt->FieldDecl(i)->attrs.get();
bool optional = (a && a->Find(ATTR_OPTIONAL)); bool optional = (a && a->Find(ATTR_OPTIONAL));
auto rv_v = rv ? rv->GetField(i) : nullptr;
sz = SingleTypeKeySize(rt->GetFieldType(i).get(), sz = SingleTypeKeySize(rt->GetFieldType(i).get(),
rv ? rv->GetField(i).get() : nullptr, rv_v.get(),
type_check, sz, optional, type_check, sz, optional,
calc_static_size); calc_static_size);
if ( ! sz ) if ( ! sz )

View file

@ -128,12 +128,12 @@ bool File::UpdateConnectionFields(Connection* conn, bool is_orig)
if ( ! conn ) if ( ! conn )
return false; return false;
Val* conns = val->GetField(conns_idx).get(); auto conns = val->GetField(conns_idx);
if ( ! conns ) if ( ! conns )
{ {
auto ect = empty_connection_table(); auto ect = empty_connection_table();
conns = ect.get(); conns = ect;
val->Assign(conns_idx, std::move(ect)); val->Assign(conns_idx, std::move(ect));
} }
@ -309,7 +309,7 @@ void File::InferMetadata()
{ {
did_metadata_inference = true; did_metadata_inference = true;
Val* bof_buffer_val = val->GetField(bof_buffer_idx).get(); auto bof_buffer_val = val->GetField(bof_buffer_idx);
if ( ! bof_buffer_val ) if ( ! bof_buffer_val )
{ {
@ -318,7 +318,7 @@ void File::InferMetadata()
String* bs = concatenate(bof_buffer.chunks); String* bs = concatenate(bof_buffer.chunks);
val->Assign(bof_buffer_idx, bs); val->Assign(bof_buffer_idx, bs);
bof_buffer_val = val->GetField(bof_buffer_idx).get(); bof_buffer_val = val->GetField(bof_buffer_idx);
} }
if ( ! FileEventAvailable(file_sniff) ) if ( ! FileEventAvailable(file_sniff) )

View file

@ -80,7 +80,8 @@ function Option::set%(ID: string, val: any, location: string &default=""%): bool
if ( same_type(val->GetType(), zeek::Broker::detail::DataVal::ScriptDataType()) ) if ( same_type(val->GetType(), zeek::Broker::detail::DataVal::ScriptDataType()) )
{ {
auto dv = static_cast<zeek::Broker::detail::DataVal*>(val->AsRecordVal()->GetField(0).get()); auto valptr = val->AsRecordVal()->GetField(0);
auto dv = static_cast<zeek::Broker::detail::DataVal*>(valptr.get());
auto val_from_data = dv->castTo(i->GetType().get()); auto val_from_data = dv->castTo(i->GetType().get());
if ( ! val_from_data ) if ( ! val_from_data )