]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
http2: support padded data frames
authorPhilippe Antoine <pantoine@oisf.net>
Mon, 21 Nov 2022 15:21:19 +0000 (16:21 +0100)
committerVictor Julien <vjulien@oisf.net>
Fri, 25 Nov 2022 19:12:31 +0000 (20:12 +0100)
Ticket: #5691
(cherry picked from commit c6349d3cfcab47224b49293688ca18242ccbdb21)

rust/src/http2/http2.rs
rust/src/http2/parser.rs

index c9aee2c9698ec6059d2157591ea297a8d9d8f6fc..6917e054cbce0bedaeba3928c1b1df748794e485 100644 (file)
@@ -832,6 +832,7 @@ impl HTTP2State {
                     let over = head.flags & parser::HTTP2_FLAG_HEADER_EOS != 0;
                     let ftype = head.ftype;
                     let sid = head.stream_id;
+                    let padded = head.flags & parser::HTTP2_FLAG_HEADER_PADDED != 0;
                     if dir == STREAM_TOSERVER {
                         tx.frames_ts.push(HTTP2Frame {
                             header: head,
@@ -851,8 +852,12 @@ impl HTTP2State {
                                 if index > 0 {
                                     let tx_same = &mut self.transactions[index - 1];
                                     let (files, flags) = self.files.get(dir);
+                                    let mut dinput = &rem[..hlsafe];
+                                    if padded && rem.len() > 0 && usize::from(rem[0]) < hlsafe{
+                                        dinput = &rem[1..hlsafe - usize::from(rem[0])];
+                                    }
                                     match tx_same.decompress(
-                                        &rem[..hlsafe],
+                                        dinput,
                                         dir,
                                         sfcm,
                                         over,
index cc76f225c3a651bab3df7c979c00a6273a73a0eb..87ab117a508a97618273d13102f5cbc7380dc237 100644 (file)
@@ -610,7 +610,7 @@ pub struct HTTP2FrameHeaders {
 //end stream
 pub const HTTP2_FLAG_HEADER_EOS: u8 = 0x1;
 pub const HTTP2_FLAG_HEADER_END_HEADERS: u8 = 0x4;
-const HTTP2_FLAG_HEADER_PADDED: u8 = 0x8;
+pub const HTTP2_FLAG_HEADER_PADDED: u8 = 0x8;
 const HTTP2_FLAG_HEADER_PRIORITY: u8 = 0x20;
 
 pub fn http2_parse_frame_headers<'a>(