Source-Changes-D archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/usr.bin/gzip
Please, can you keep your commit messages to the point?
"Fix unportable left shift"
is probably a good enough summary. You don't have to paste the test
suite results and the actual diffs in free form as well.
On Tue, Jun 12, 2018 at 00:42:17 +0000, Kamil Rytarowski wrote:
> Log Message:
> Correct Undefined Behavior in gzip(1)
>
> Unportable left shift reported with MKSANITIZER=yes USE_SANITIZER=undefined:
>
> # progress -zf ./games.tgz tar -xp -C "./" -f -
> /public/src.git/usr.bin/gzip/gzip.c:2126:33: runtime error: left shift of 251 by 24 places cannot be represented in type 'int'
> 100% |****************************************************************************************************************| 44500 KiB 119.69 MiB/s 00:00 ETA
>
> Refactor the following code into something that is more clear
> and fix signed integer shift, by casting all buf[] elements to
> (unsigned int):
>
> unsigned char buf[8];
> uint32_t usize;
> [...]
> else {
> usize = buf[4] | buf[5] << 8 |
> buf[6] << 16 | buf[7] << 24;
> [...]
>
> New version:
>
> usize = buf[4];
> usize |= (unsigned int)buf[5] << 8;
> usize |= (unsigned int)buf[6] << 16;
> usize |= (unsigned int)buf[7] << 24;
>
> Only the "<< 24" part needs explicit cast, but for consistency make the
> integer promotion explicit and clear to a code reader.
>
> Sponsored by <The NetBSD Foundation>
-uwe
Home |
Main Index |
Thread Index |
Old Index