From e1c06929253cb6feb0dbebc063e5db41048d0a14 Mon Sep 17 00:00:00 2001 From: Tony Cook Date: Sat, 2 Feb 2019 11:45:04 +1100 Subject: [PATCH] avoid a possible sign-extension for offsets/sizes in SGI and why is that using + instead of | ? CID 185326. --- SGI/SGI.pm | 2 +- SGI/imsgi.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) 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]; } -- 2.39.2