This is an automated email from the ASF dual-hosted git repository.

cmcfarlen pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git

commit de7338bffff68c3704468774077804c9197ccd4f
Author: Brian Neradt <[email protected]>
AuthorDate: Tue Jul 8 13:44:06 2025 -0500

    ja3_fingerprint: fix leak of duplicate header fields (#12331)
    
    When looping through duplicate header fields with TSMimeHdrFieldNextDup,
    each iteration must free the TSMLoc. ja3_fingerprint had a loop where it
    did not do this, thus it leaked these. This adds the required
    TSHandleMLocRelease.
    
    (cherry picked from commit 0c08c8d2051b5956b9218249277c201b8e52a755)
---
 plugins/ja3_fingerprint/ja3_fingerprint.cc | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/plugins/ja3_fingerprint/ja3_fingerprint.cc 
b/plugins/ja3_fingerprint/ja3_fingerprint.cc
index b1403d8ae6..3fb84f8309 100644
--- a/plugins/ja3_fingerprint/ja3_fingerprint.cc
+++ b/plugins/ja3_fingerprint/ja3_fingerprint.cc
@@ -181,10 +181,12 @@ append_to_field(TSMBuffer bufp, TSMLoc hdr_loc, const 
char *field, int field_len
     TSMimeHdrFieldAppend(bufp, hdr_loc, target);
     TSMimeHdrFieldValueStringInsert(bufp, hdr_loc, target, -1, value, 
value_len);
   } else if (!preserve) {
-    TSMLoc next = target;
-    while (next) {
-      target = next;
-      next   = TSMimeHdrFieldNextDup(bufp, hdr_loc, target);
+    // Find the last duplicate, being careful to release the previous TSMLoc 
along the way.
+    TSMLoc dup = TSMimeHdrFieldNextDup(bufp, hdr_loc, target);
+    while (dup != TS_NULL_MLOC) {
+      TSHandleMLocRelease(bufp, hdr_loc, target);
+      target = dup;
+      dup    = TSMimeHdrFieldNextDup(bufp, hdr_loc, target);
     }
     TSMimeHdrFieldValueStringInsert(bufp, hdr_loc, target, -1, value, 
value_len);
   }

Reply via email to