]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
mime: avoid quadratic complexity in MimeDecAddEntity
authorPhilippe Antoine <pantoine@oisf.net>
Mon, 11 Sep 2023 14:49:48 +0000 (16:49 +0200)
committerVictor Julien <vjulien@oisf.net>
Wed, 18 Oct 2023 07:09:47 +0000 (09:09 +0200)
Ticket: #6306

Keep a reference to last child, consume a bit more RAM to save CPU

src/util-decode-mime.c
src/util-decode-mime.h

index 8e8b426c44a86f44478211f64246d86fa5273ee2..5e7a8d5713f41880937b541c6e5cafddb3e6f92f 100644 (file)
@@ -384,7 +384,7 @@ static MimeDecUrl * MimeDecAddUrl(MimeDecEntity *entity, uint8_t *url, uint32_t
  */
 MimeDecEntity * MimeDecAddEntity(MimeDecEntity *parent)
 {
-    MimeDecEntity *curr, *node = SCMalloc(sizeof(MimeDecEntity));
+    MimeDecEntity *node = SCMalloc(sizeof(MimeDecEntity));
     if (unlikely(node == NULL)) {
         return NULL;
     }
@@ -394,12 +394,10 @@ MimeDecEntity * MimeDecAddEntity(MimeDecEntity *parent)
     if (parent != NULL) {
         if (parent->child == NULL) {
             parent->child = node;
+            parent->last_child = node;
         } else {
-            curr = parent->child;
-            while (curr->next != NULL) {
-                curr = curr->next;
-            }
-            curr->next = node;
+            parent->last_child->next = node;
+            parent->last_child = node;
         }
     }
 
index 0dde13ca049639d1c9cd968bf6aeba1956c8b39f..cc79d98a6eb01f84c892de48c80bcd7e2b855099 100644 (file)
@@ -144,6 +144,7 @@ typedef struct MimeDecEntity {
     uint8_t *msg_id;  /**< Quick access pointer to message Id */
     struct MimeDecEntity *next;  /**< Pointer to list of sibling entities */
     struct MimeDecEntity *child;  /**< Pointer to list of child entities */
+    struct MimeDecEntity *last_child; /**< Pointer to tail of the list of child entities */
 } MimeDecEntity;
 
 /**