From: Tony Cook Date: Sat, 2 Feb 2019 00:45:04 +0000 (+1100) Subject: avoid a possible sign-extension for offsets/sizes in SGI X-Git-Tag: v1.010~14 X-Git-Url: http://git.imager.perl.org/imager.git/commitdiff_plain/e1c0692925?hp=0417a06f2c6b9a1f87c6fe4c124e54346df63b39 avoid a possible sign-extension for offsets/sizes in SGI and why is that using + instead of | ? CID 185326. --- diff --git a/SGI/SGI.pm b/SGI/SGI.pm index 3a3bf90f..b033b2dd 100644 --- a/SGI/SGI.pm +++ b/SGI/SGI.pm @@ -4,7 +4,7 @@ use Imager; use vars qw($VERSION @ISA); BEGIN { - $VERSION = "0.03"; + $VERSION = "0.04"; require XSLoader; XSLoader::load('Imager::File::SGI', $VERSION); diff --git a/SGI/imsgi.c b/SGI/imsgi.c index 3b61d826..f6ad1b57 100644 --- a/SGI/imsgi.c +++ b/SGI/imsgi.c @@ -442,7 +442,7 @@ read_rle_tables(io_glue *ig, i_img *img, } for(i = 0; i < height * channels; i++) - start_tab[i] = (databuf[i*4] << 24) | (databuf[i*4+1] << 16) | + start_tab[i] = ((unsigned long)databuf[i*4] << 24) | (databuf[i*4+1] << 16) | (databuf[i*4+2] << 8) | (databuf[i*4+3]); @@ -453,8 +453,8 @@ read_rle_tables(io_glue *ig, i_img *img, } for(i=0; i < height * channels; i++) { - length_tab[i] = (databuf[i*4] << 24) + (databuf[i*4+1] << 16)+ - (databuf[i*4+2] << 8) + (databuf[i*4+3]); + length_tab[i] = ((unsigned long)databuf[i*4] << 24) | (databuf[i*4+1] << 16) | + (databuf[i*4+2] << 8) | (databuf[i*4+3]); if (length_tab[i] > max_length) max_length = length_tab[i]; }