diff options
| author | mat <git@matdoes.dev> | 2026-01-11 23:01:30 -1030 |
|---|---|---|
| committer | mat <git@matdoes.dev> | 2026-01-11 23:01:30 -1030 |
| commit | 736edae2ad243f6eb3e7b01ca9b6266745cdeb24 (patch) | |
| tree | 3d1ae581c5a1addca1ac48febb59a29de0fb180b /azalea-protocol/src | |
| parent | 1accbac964168af5fa0d87cb170389f0a9d01363 (diff) | |
| download | azalea-drasl-736edae2ad243f6eb3e7b01ca9b6266745cdeb24.tar.xz | |
add fuzzer for azalea-protocol and fix a few panics
Diffstat (limited to 'azalea-protocol/src')
| -rw-r--r-- | azalea-protocol/src/common/tags.rs | 4 | ||||
| -rw-r--r-- | azalea-protocol/src/read.rs | 33 |
2 files changed, 35 insertions, 2 deletions
diff --git a/azalea-protocol/src/common/tags.rs b/azalea-protocol/src/common/tags.rs index f22175ee..3f9a2ef2 100644 --- a/azalea-protocol/src/common/tags.rs +++ b/azalea-protocol/src/common/tags.rs @@ -19,11 +19,11 @@ pub struct Tags { impl AzaleaRead for TagMap { fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> { let length = u32::azalea_read_var(buf)? as usize; - let mut data = IndexMap::with_capacity(length); + let mut data = IndexMap::new(); for _ in 0..length { let tag_type = Identifier::azalea_read(buf)?; let tags_count = i32::azalea_read_var(buf)? as usize; - let mut tags_vec = Vec::with_capacity(tags_count); + let mut tags_vec = Vec::new(); for _ in 0..tags_count { let tags = Tags::azalea_read(buf)?; tags_vec.push(tags); diff --git a/azalea-protocol/src/read.rs b/azalea-protocol/src/read.rs index d6c8c65a..664e2593 100644 --- a/azalea-protocol/src/read.rs +++ b/azalea-protocol/src/read.rs @@ -401,3 +401,36 @@ where Ok(Some(buf)) } + +#[cfg(test)] +mod tests { + use std::io::Cursor; + + use crate::{packets::game::ClientboundGamePacket, read::deserialize_packet}; + + #[test] + fn fuzzed_1() { + // oom: checks for unbounded TagMap + let _ = deserialize_packet::<ClientboundGamePacket>(&mut Cursor::new( + [132, 1, 255, 255, 255, 255, 255].as_slice(), + )); + } + #[test] + fn fuzzed_2() { + // oom: also checks for unbounded TagMap + let _ = deserialize_packet::<ClientboundGamePacket>(&mut Cursor::new( + [132, 1, 75, 0, 255, 255, 255, 255, 24, 0].as_slice(), + )); + } + #[test] + fn fuzzed_3() { + // panic: integer overflow in HolderSet::azalea_read + let _ = deserialize_packet::<ClientboundGamePacket>(&mut Cursor::new( + [ + 94, 44, 157, 38, 61, 37, 37, 37, 37, 37, 37, 65, 128, 128, 1, 1, 255, 252, 128, + 128, 128, 128, 128, 128, 128, 40, 0, + ] + .as_slice(), + )); + } +} |
