From cc181167644e1b88630ac02e2b718ad3ad0145c4 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Fri, 23 Feb 2024 23:41:30 +0100
Subject: Fix three bugs in the atom selection function.

---
 src/analysis/scan/patterns/tokens/atom.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/analysis/scan/patterns/tokens/atom.c b/src/analysis/scan/patterns/tokens/atom.c
index f59c81c..4f2ad67 100644
--- a/src/analysis/scan/patterns/tokens/atom.c
+++ b/src/analysis/scan/patterns/tokens/atom.c
@@ -211,11 +211,12 @@ void find_best_atom(const sized_binary_t *raw, size_t maxsize, tracked_scan_atom
     bin_t ch;                               /* Octets à étudier            */
     size_t best_letters;                    /* Mémorisation de décompte    */
     size_t *ptr_letters;                    /* Pointeur vers le décompte   */
-    int best_rating;                        /* Meilleur notation obtenue   */
+    int raw_rating;                         /* Notation brute de séquence  */
     uint8_t seen[256];                      /* Mémorisation des passages   */
     size_t uniq;                            /* Nombre d'octets originaux   */
-    size_t max_loop;                        /* Limitation des itérations   */
     const bin_t *last;                      /* Dernier caractère étudié    */
+    int best_rating;                        /* Meilleur notation obtenue   */
+    size_t max_loop;                        /* Limitation des itérations   */
     size_t k;                               /* Boucle de parcours #2       */
     size_t local_letters;                   /* Décompte courant des lettres*/
     int local_rating;                       /* Notation courante           */
@@ -258,7 +259,7 @@ void find_best_atom(const sized_binary_t *raw, size_t maxsize, tracked_scan_atom
         ptr_letters = (letters != NULL ? &best_letters : NULL);
 
         best_letters = 0;
-        best_rating = 0;
+        raw_rating = 0;
 
         memset(seen, 0, sizeof(seen));
         uniq = 0;
@@ -266,9 +267,9 @@ void find_best_atom(const sized_binary_t *raw, size_t maxsize, tracked_scan_atom
         last = raw->static_bin_data;
 
         for (k = 0; k < maxsize; k++)
-            best_rating += rate_byte_quality(*last++, seen, &uniq, ptr_letters);
+            raw_rating += rate_byte_quality(*last++, seen, &uniq, ptr_letters);
 
-        best_rating = finish_quality_rating(best_rating, uniq, maxsize);
+        best_rating = finish_quality_rating(raw_rating, uniq, maxsize);
 
         /* Parcours du reste du contenu */
 
@@ -283,14 +284,14 @@ void find_best_atom(const sized_binary_t *raw, size_t maxsize, tracked_scan_atom
 
         for (i = 0; i < max_loop; i++)
         {
-            local_rating += rate_byte_quality(*last++, seen, &uniq, ptr_letters);
-            local_rating -= rate_byte_quality(*first++, seen, &uniq, ptr_letters);
+            raw_rating += rate_byte_quality(*last++, seen, &uniq, ptr_letters);
+            raw_rating -= unrate_byte_quality(*first++, seen, &uniq, ptr_letters);
 
-            local_rating = finish_quality_rating(local_rating, uniq, maxsize);
+            local_rating = finish_quality_rating(raw_rating , uniq, maxsize);
 
             if (local_rating > best_rating)
             {
-                atom->pos = maxsize + i;
+                atom->pos = i + 1;
 
                 best_letters = local_letters;
                 best_rating = local_rating;
-- 
cgit v0.11.2-87-g4458