diff --git a/scripts/policy/protocols/http/detect-webapps.bro b/scripts/policy/protocols/http/detect-webapps.bro index fb805bfd33..53d7109468 100644 --- a/scripts/policy/protocols/http/detect-webapps.bro +++ b/scripts/policy/protocols/http/detect-webapps.bro @@ -28,7 +28,7 @@ event signature_match(state: signature_state, msg: string, data: string) &priori if ( /^webapp-/ !in state$sig_id ) return; local c = state$conn; - local si = Software::Info; + local si: Software::Info; si = [$name=msg, $unparsed_version=msg, $host=c$id$resp_h, $host_p=c$id$resp_p, $software_type=WEB_APPLICATION]; si$url = build_url_http(c$http); if ( c$id$resp_h in Software::tracked && diff --git a/src/Expr.cc b/src/Expr.cc index 3a4e8add70..926c537720 100644 --- a/src/Expr.cc +++ b/src/Expr.cc @@ -233,7 +233,11 @@ NameExpr::NameExpr(ID* arg_id, bool const_init) : Expr(EXPR_NAME) { id = arg_id; in_const_init = const_init; - SetType(id->Type()->Ref()); + + if ( id->AsType() ) + SetType(new TypeType(id->AsType())); + else + SetType(id->Type()->Ref()); EventHandler* h = event_registry->Lookup(id->Name()); if ( h ) diff --git a/testing/btest/Baseline/language.type-type-error/.stderr b/testing/btest/Baseline/language.type-type-error/.stderr new file mode 100644 index 0000000000..95cb065ece --- /dev/null +++ b/testing/btest/Baseline/language.type-type-error/.stderr @@ -0,0 +1 @@ +error in /home/jsiwek/bro/testing/btest/.tmp/language.type-type-error/type-type-error.bro, line 13: not a record (r$a) diff --git a/testing/btest/language/type-type-error.bro b/testing/btest/language/type-type-error.bro new file mode 100644 index 0000000000..047e4b34ef --- /dev/null +++ b/testing/btest/language/type-type-error.bro @@ -0,0 +1,14 @@ +# @TEST-EXEC-FAIL: bro -b %INPUT +# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff .stderr + +type r: record { + a: string; +}; + +event bro_init() + { + # This should generate a parse error indicating that the type identifier + # is incorrectly used in an expression expecting a real value and not + # a value of type TypeType. + print r$a; + }