summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2023-11-15 00:53:22 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2023-11-15 00:59:10 (GMT)
commit025b364871c7a78ac03652dc6e47ee29e38199a0 (patch)
treec1de132b05edbbe9ece40b6b5cff253cda10b733 /src
parent50789d8c735178858411f67118bc73eb620f4e69 (diff)
Ban pattern count indexes sooner (from the grammar).
Diffstat (limited to 'src')
-rw-r--r--src/analysis/scan/exprs/handler.c23
-rw-r--r--src/analysis/scan/exprs/handler.h3
-rw-r--r--src/analysis/scan/grammar.y9
3 files changed, 34 insertions, 1 deletions
diff --git a/src/analysis/scan/exprs/handler.c b/src/analysis/scan/exprs/handler.c
index ea24443..ecc5a21 100644
--- a/src/analysis/scan/exprs/handler.c
+++ b/src/analysis/scan/exprs/handler.c
@@ -248,6 +248,29 @@ bool g_scan_pattern_handler_create(GScanPatternHandler *handler, GSearchPattern
/******************************************************************************
* *
* Paramètres : handler = instance à initialiser pleinement. *
+* *
+* Description : Indique le type de manipulation de correspondances spécifié. *
+* *
+* Retour : Type de manipulation de correspondances représentée. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+ScanHandlerType g_scan_pattern_handler_get_handler_type(const GScanPatternHandler *handler)
+{
+ ScanHandlerType result; /* Nature à retourner */
+
+ result = handler->type;
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : handler = instance à initialiser pleinement. *
* ctx = contexte de suivi de l'analyse courante. *
* count = quantité de correspondances enregistrées. [OUT] *
* *
diff --git a/src/analysis/scan/exprs/handler.h b/src/analysis/scan/exprs/handler.h
index 407ccdc..24c4e8f 100644
--- a/src/analysis/scan/exprs/handler.h
+++ b/src/analysis/scan/exprs/handler.h
@@ -62,6 +62,9 @@ GType g_scan_pattern_handler_get_type(void);
/* Met en place une manipulation de correspondances établies. */
GScanExpression *g_scan_pattern_handler_new(GSearchPattern ** const, size_t, ScanHandlerType);
+/* Indique le type de manipulation de correspondances spécifié. */
+ScanHandlerType g_scan_pattern_handler_get_handler_type(const GScanPatternHandler *);
+
/* Fournit la liste de toutes les correspondances représentées. */
GScanMatch **g_scan_pattern_handler_get_all_matches(const GScanPatternHandler *, GScanContext *, size_t *);
diff --git a/src/analysis/scan/grammar.y b/src/analysis/scan/grammar.y
index 801898f..8380a81 100644
--- a/src/analysis/scan/grammar.y
+++ b/src/analysis/scan/grammar.y
@@ -1541,11 +1541,18 @@ relational_expr : cexpression "<" cexpression
{
$$ = $1;
}
- | pattern_handler "[" cexpression "]"
+ | _pattern_handler "[" cexpression "]"
{
+ if (g_scan_pattern_handler_get_handler_type(G_SCAN_PATTERN_HANDLER($1)) == SHT_COUNTER)
+ {
+ raise_error("Match counts can not get indexed");
+ YYERROR;
+ }
+
$$ = g_scan_set_item_new($1, $3);
g_object_unref(G_OBJECT($1));
g_object_unref(G_OBJECT($3));
+
}
;