From 7118845518dc3f1c8c56d6526b1bb7036c9de1c4 Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Sat, 8 Oct 2022 11:23:49 +0200 Subject: [PATCH] Fix endianness when reading the `extra` field of a gzip header MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As specified in RFC1952 ยง2.1 multi-byte values are stored in little endian format. --- src/codec/gzip/header.rs | 2 +- tests/gzip.rs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/codec/gzip/header.rs b/src/codec/gzip/header.rs index 2132da08..8d82301e 100644 --- a/src/codec/gzip/header.rs +++ b/src/codec/gzip/header.rs @@ -85,7 +85,7 @@ impl Parser { data.copy_unwritten_from(input); if data.unwritten().is_empty() { - let len = u16::from_be_bytes(data.take().into_inner()); + let len = u16::from_le_bytes(data.take().into_inner()); self.state = State::Extra(vec![0; usize::from(len)].into()); } else { return Ok(None); diff --git a/tests/gzip.rs b/tests/gzip.rs index 1594986f..b17c7b34 100644 --- a/tests/gzip.rs +++ b/tests/gzip.rs @@ -109,6 +109,7 @@ fn compress_with_header(data: &[u8]) -> Vec { let mut gz = GzBuilder::new() .filename("hello_world.txt") .comment("test file, please delete") + .extra(vec![1, 2, 3, 4]) .write(&mut bytes, Compression::fast()); gz.write_all(data).unwrap();