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); }
