diff options
-rw-r--r-- | src/analysis/scan/grammar.y | 9 | ||||
-rw-r--r-- | tests/analysis/scan/fuzzing.py | 17 |
2 files changed, 24 insertions, 2 deletions
diff --git a/src/analysis/scan/grammar.y b/src/analysis/scan/grammar.y index 9c3b08b..898b135 100644 --- a/src/analysis/scan/grammar.y +++ b/src/analysis/scan/grammar.y @@ -343,8 +343,13 @@ string_decl : IDENTIFIER ASSIGN PLAIN_STRING { GSearchPattern *__pat; __pat = g_scan_rule_get_local_variable(*built_rule, $1.data); - $$ = g_scan_match_counter_new(__pat); - g_object_unref(G_OBJECT(__pat)); + if (__pat == NULL) + $$ = NULL; + else + { + $$ = g_scan_match_counter_new(__pat); + g_object_unref(G_OBJECT(__pat)); + } } ; diff --git a/tests/analysis/scan/fuzzing.py b/tests/analysis/scan/fuzzing.py index 0870ed4..2140972 100644 --- a/tests/analysis/scan/fuzzing.py +++ b/tests/analysis/scan/fuzzing.py @@ -46,3 +46,20 @@ rule test { with self.assertRaisesRegex(ValueError, 'Unable to create content scanner'): scanner = ContentScanner(rule) + + + def testNonExistingPattern(self): + """Avoid to count the matches of a non-existing pattern.""" + + rule = ''' +rule test { + + condition: + #badid + +} +''' + + with self.assertRaisesRegex(ValueError, 'Unable to create content scanner'): + + scanner = ContentScanner(rule) |