avoid a possible sign-extension for offsets/sizes in SGI
authorTony Cook <tony@develop-help.com>
Sat, 2 Feb 2019 00:45:04 +0000 (11:45 +1100)
committerTony Cook <tony@develop-help.com>
Sat, 2 Feb 2019 00:46:32 +0000 (11:46 +1100)
and why is that using + instead of | ?

CID 185326.

SGI/SGI.pm
SGI/imsgi.c

index 3a3bf90..b033b2d 100644 (file)
@@ -4,7 +4,7 @@ use Imager;
 use vars qw($VERSION @ISA);
 
 BEGIN {
 use vars qw($VERSION @ISA);
 
 BEGIN {
-  $VERSION = "0.03";
+  $VERSION = "0.04";
   
   require XSLoader;
   XSLoader::load('Imager::File::SGI', $VERSION);
   
   require XSLoader;
   XSLoader::load('Imager::File::SGI', $VERSION);
index 3b61d82..f6ad1b5 100644 (file)
@@ -442,7 +442,7 @@ read_rle_tables(io_glue *ig, i_img *img,
   }
 
   for(i = 0; i < height * channels; i++) 
   }
 
   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]);
 
 
       (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++) {
   }
 
   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];
   }
     if (length_tab[i] > max_length)
       max_length = length_tab[i];
   }