]> 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>
Tue, 22 Nov 2022 13:20:20 +0000 (14:20 +0100)
Ticket: #5691

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

index 404081c94ce21922f0b1adcb929503546052ce19..3a6ffab7ec369d811b824bc55cdfdbc054fc926d 100644 (file)
@@ -933,6 +933,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 == Direction::ToServer {
                         tx.frames_ts.push(HTTP2Frame {
                             header: head,
@@ -956,9 +957,12 @@ impl HTTP2State {
                                     } else {
                                         tx_same.ft_ts.tx_id = tx_same.tx_id - 1;
                                     };
-
+                                    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 90b7ba639404a0918bb709e2e2e023445bf21a63..6c16d8762f0677ab7aa56d51236c503ab47800b2 100644 (file)
@@ -585,7 +585,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;
 
 fn http2_parse_headers_blocks<'a>(