diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2024-02-20 08:11:17 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2024-02-20 08:11:17 (GMT) |
commit | 26f93f593542cc550107744e92f95e9516e7435e (patch) | |
tree | 058cf883324274965356beb42398c387c0e49217 /src/analysis/scan/rule.c | |
parent | 30e56f25772247d76c7775d32ccd5b5a0661d3bf (diff) |
Share GObject instances between scan contexts and matches.
Diffstat (limited to 'src/analysis/scan/rule.c')
-rw-r--r-- | src/analysis/scan/rule.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/analysis/scan/rule.c b/src/analysis/scan/rule.c index 14a6d38..05fc657 100644 --- a/src/analysis/scan/rule.c +++ b/src/analysis/scan/rule.c @@ -613,17 +613,34 @@ bool g_scan_rule_define_pattern_ids(GScanRule *rule, GEngineBackend *backend) void g_scan_rule_check(GScanRule *rule, GEngineBackend *backend, GScanContext *context) { + scan_node_check_params_t params; /* Rassemblement de paramètres */ + vmpa2t start; /* Point de début du contenu */ + vmpa2t end; /* Point de fin du contenu */ size_t i; /* Boucle de parcours */ GSearchPattern *pattern; /* Motif à intégrer */ - GScanBytesMatches *matches; /* Correspondances établies */ + GScanMatches *matches; /* Correspondances établies */ + + /* Définition d'un contexte */ + + params.context = context; + params.content = g_scan_context_get_content(context); + params.allocator = g_umem_slice_new(sizeof(match_area_t)); + + g_binary_content_compute_start_pos(params.content, &start); + g_binary_content_compute_end_pos(params.content, &end); + + params.content_start = start.physical; + params.content_end = end.physical; + + /* Vérifications */ for (i = 0; i < rule->bytes_used; i++) { pattern = rule->bytes_locals[i]; - matches = g_scan_bytes_matches_new(pattern, context); + matches = g_scan_bytes_matches_new(); - g_bytes_token_check(G_BYTES_TOKEN(pattern), matches); + g_bytes_token_check(G_BYTES_TOKEN(pattern), G_SCAN_BYTES_MATCHES(matches), ¶ms); g_scan_context_register_full_matches(context, pattern, matches); @@ -631,6 +648,9 @@ void g_scan_rule_check(GScanRule *rule, GEngineBackend *backend, GScanContext *c } + g_object_unref(G_OBJECT(params.content)); + //g_object_unref(G_OBJECT(params.allocator)); + } |