From bd24020c0e3419c6ce479a88c04b84c0ecd9a207 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Tue, 12 Sep 2023 09:14:15 +0200
Subject: Get more verbose when an unknown modifier is used in a rule.

---
 src/analysis/scan/core.c    |  2 --
 src/analysis/scan/grammar.y | 33 +++++++++++++++++++++++++++++++--
 2 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/src/analysis/scan/core.c b/src/analysis/scan/core.c
index 0b2c1d5..da3cf00 100644
--- a/src/analysis/scan/core.c
+++ b/src/analysis/scan/core.c
@@ -304,8 +304,6 @@ bool populate_main_scan_namespace(GScanNamespace *space)
         ns = g_scan_namespace_new("string");
         result = g_scan_namespace_register_item(space, G_REGISTERED_ITEM(ns));
 
-        printf("g_scan_string_to_int_function_new(): %p\n", g_scan_string_to_int_function_new());
-
         if (result) result = REGISTER_FUNC(ns, g_scan_string_lower_function_new());
         if (result) result = REGISTER_FUNC(ns, g_scan_string_to_int_function_new());
         if (result) result = REGISTER_FUNC(ns, g_scan_string_upper_function_new());
diff --git a/src/analysis/scan/grammar.y b/src/analysis/scan/grammar.y
index 66d3f87..70382cf 100644
--- a/src/analysis/scan/grammar.y
+++ b/src/analysis/scan/grammar.y
@@ -8,6 +8,9 @@
 /* Affiche un message d'erreur suite à l'analyse en échec. */
 static int yyerror(GContentScanner *, yyscan_t, GScanRule **, sized_string_t *, sized_string_t *, void/*GBytesPattern*/ **, char **, size_t *, size_t *, char *);
 
+#define raise_error(msg) \
+    yyerror(scanner, yyscanner, built_rule, tmp_0, tmp_1, NULL, buf, allocated, used, msg)
+
 %}
 
 
@@ -17,6 +20,10 @@ static int yyerror(GContentScanner *, yyscan_t, GScanRule **, sized_string_t *,
 typedef void *yyscan_t;
 
 #include <assert.h>
+#include <malloc.h>
+#include <stdio.h>
+
+#include <i18n.h>
 
 #include "core.h"
 #include "scanner.h"
@@ -372,6 +379,7 @@ YY_DECL;
  */
 
            strings : /* empty */
+                   | STRINGS COLON
                    | STRINGS COLON bytes_decls
                    ;
 
@@ -388,6 +396,9 @@ YY_DECL;
                        g_object_unref(G_OBJECT($1));
                    }
                    | regex_pattern
+                   {
+                       // TODO
+                   }
                    | bytes_decls str_pattern
                    {
                        if ($2 == NULL) YYERROR;
@@ -401,6 +412,9 @@ YY_DECL;
                        g_object_unref(G_OBJECT($2));
                    }
                    | bytes_decls regex_pattern
+                   {
+                       // TODO
+                   }
                    ;
 
 
@@ -445,8 +459,9 @@ YY_DECL;
                    }
                    | _modifiers
                    {
+                       $$ = $1;
 
-                    // if (...) useless
+                       // if (...) useless
 
                    }
                    ;
@@ -494,7 +509,21 @@ YY_DECL;
           modifier : NAME
                    {
                        $$ = find_scan_token_modifiers_for_name($1.data);
-                       if ($$ == NULL) YYERROR;
+                       if ($$ == NULL)
+                       {
+                           char *_msg;
+                           int _ret;
+
+                           _ret = asprintf(&_msg, _("unknown modifier: \"%s\""), $1.data);
+
+                           if (_ret != -1)
+                           {
+                               raise_error(_msg);
+                               free(_msg);
+                           }
+
+                           YYERROR;
+                       }
                    }
                    | "(" chained_modifiers ")"
                    {
-- 
cgit v0.11.2-87-g4458