dropbox / rust-brotli

Brotli compressor and decompressor written in rust that optionally avoids the stdlib
https://dropbox.tech/infrastructure/-broccoli--syncing-faster-by-syncing-less
BSD 3-Clause "New" or "Revised" License
797 stars 83 forks source link

Improve hq.rs #211

Open nyurik opened 1 month ago

nyurik commented 1 month ago

Reworked hq.rs to be simpler.

I found what seems like a bug in the code when it uses v.wrapping_add(1) > 0 when v is a usize-- because the only way for this condition to be false is for v to be usize::MAX -- and this will not be consistent between x32 and x64 versions. Moreover, there is even a case of wrapping_add(2) -- which would only pass if the original is usize::MAX-1.

Given all this, this expression does not make any sense, and should be replaced with m.alloc_cell(num_bytes + 2):

if num_bytes + 2 > 0 {
    m.alloc_cell(num_bytes + 2)
} else {
    AllocF::AllocatedMemory::default()
}