diff options
author | David Jones <drj@ravenbrook.com> | 2024-10-11 15:49:17 +0000 |
---|---|---|
committer | Warner Losh <imp@FreeBSD.org> | 2024-10-11 15:50:09 +0000 |
commit | 818c7b769a4f7d3c8fecc4cf491f4e22ef816eba (patch) | |
tree | 765fda4f7328013abab369a15d9b03a5032537cd /usr.bin | |
parent | 6cde8f3ef7cd060be39d78055eaf982b06b19a3b (diff) | |
download | src-818c7b769a4f7d3c8fecc4cf491f4e22ef816eba.tar.gz src-818c7b769a4f7d3c8fecc4cf491f4e22ef816eba.zip |
uncompress: Avoid reading an extra byte
When reading the next code in a stream, avoid reading an extra byte if
we're going to throw it away. When there's no more bits to extract from
the stream, bits will be 0 and we'll mask the read byte with 0 anyway.
At worst, this will avoid reading one past the end of gbuf array (which
is not possible in well formed streams).
PR: 127912
Reviewed by: emaste
Differential Revision: https://reviews.freebsd.org/D47041
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/compress/zopen.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/usr.bin/compress/zopen.c b/usr.bin/compress/zopen.c index be66358884ca..cb7e6e9eb10a 100644 --- a/usr.bin/compress/zopen.c +++ b/usr.bin/compress/zopen.c @@ -620,7 +620,8 @@ getcode(struct s_zstate *zs) } /* High order bits. */ - gcode |= (*bp & rmask[bits]) << r_off; + if (bits > 0) + gcode |= (*bp & rmask[bits]) << r_off; roffset += n_bits; return (gcode); |