diff --git a/CHANGES b/CHANGES index 1e4593750b..35ef70d90b 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,12 @@ +2.4-606 | 2016-06-14 16:11:07 -0700 + + * Fix parsing precedence of "hook" expression. Addresses BIT-1619 + (Johanna Amann) + + * Update the "configure" usage message for --with-caf (Daniel + Thayer) + 2.4-602 | 2016-06-13 08:16:34 -0700 * Fixing Covertity warning (CID 1356391). (Robin Sommer) diff --git a/VERSION b/VERSION index c6874864e6..116c6d5941 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.4-602 +2.4-606 diff --git a/src/parse.y b/src/parse.y index f9eb7cbe9b..facd7e55ed 100644 --- a/src/parse.y +++ b/src/parse.y @@ -31,12 +31,12 @@ %token TOK_NO_TEST -%nonassoc TOK_HOOK %left ',' '|' %right '=' TOK_ADD_TO TOK_REMOVE_FROM %right '?' ':' %left TOK_OR %left TOK_AND +%nonassoc TOK_HOOK %nonassoc '<' '>' TOK_LE TOK_GE TOK_EQ TOK_NE %left TOK_IN TOK_NOT_IN %left '+' '-' diff --git a/testing/btest/Baseline/language.hook/out b/testing/btest/Baseline/language.hook/out index d4f367f875..28543d5320 100644 --- a/testing/btest/Baseline/language.hook/out +++ b/testing/btest/Baseline/language.hook/out @@ -17,3 +17,7 @@ myhook return F myhook return T myhook, &priority=5, [a=37, b=goobye world] F +myhook5, test +second part ran +myhook5 ran +myhook6, test diff --git a/testing/btest/language/hook.bro b/testing/btest/language/hook.bro index 9c9ab30c18..3edfd9556c 100644 --- a/testing/btest/language/hook.bro +++ b/testing/btest/language/hook.bro @@ -10,6 +10,8 @@ global myhook: hook(r: rec); global myhook2: hook(s: string); # a hook doesn't have to take any arguments global myhook4: hook(); +global myhook5: hook(s: string); +global myhook6: hook(s: string); hook myhook(r: rec) &priority=5 { @@ -72,6 +74,23 @@ hook myhook4() &priority=2 print "myhook4", 2; } +hook myhook5(s: string) + { + print "myhook5", s; + } + +hook myhook6(s: string) + { + print "myhook6", s; + break; + } + +function printMe(s: string): bool + { + print s; + return T; + } + event bro_init() { print hook myhook([$a=1156, $b="hello world"]); @@ -90,4 +109,10 @@ event bro_init() # invoked directly by name. local h = myhook; print hook h([$a=2, $b="it works"]); + + if ( hook myhook5("test") && printMe("second part ran") ) + print "myhook5 ran"; + + if ( ( hook myhook6("test") ) && printMe("second part ran") ) + print "myhook6 ran"; }