From: Philippe Antoine Date: Mon, 17 Jun 2024 14:30:49 +0000 (+0200) Subject: http2: do not expand duplicate headers X-Git-Tag: suricata-8.0.0-beta1~1106 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5bd17934df321b88f502d48afdd6cc8bad4787a7;p=thirdparty%2Fsuricata.git http2: do not expand duplicate headers Ticket: 7104 As this can cause a big mamory allocation due to the quadratic nature of the HPACK compression. --- diff --git a/rust/src/http2/detect.rs b/rust/src/http2/detect.rs index 67933b6c24..0e7cee8757 100644 --- a/rust/src/http2/detect.rs +++ b/rust/src/http2/detect.rs @@ -433,11 +433,11 @@ pub fn http2_frames_get_header_value_vec( if found == 0 { vec.extend_from_slice(&block.value); found = 1; - } else if found == 1 { + } else if found == 1 && Rc::strong_count(&block.name) <= 2 { vec.extend_from_slice(&[b',', b' ']); vec.extend_from_slice(&block.value); found = 2; - } else { + } else if Rc::strong_count(&block.name) <= 2 { vec.extend_from_slice(&[b',', b' ']); vec.extend_from_slice(&block.value); } @@ -470,14 +470,14 @@ fn http2_frames_get_header_value<'a>( if found == 0 { single = Ok(&block.value); found = 1; - } else if found == 1 { + } else if found == 1 && Rc::strong_count(&block.name) <= 2 { if let Ok(s) = single { vec.extend_from_slice(s); } vec.extend_from_slice(&[b',', b' ']); vec.extend_from_slice(&block.value); found = 2; - } else { + } else if Rc::strong_count(&block.name) <= 2 { vec.extend_from_slice(&[b',', b' ']); vec.extend_from_slice(&block.value); }