File ghostscript-8.57-sgirdb.dif of Package ghostscript-library

--- src/gdevsgi.c
+++ src/gdevsgi.c	2007-06-14 17:32:26.811161244 +0200
@@ -69,12 +69,20 @@ private int
 sgi_begin_page(gx_device_printer *bdev, FILE *pstream, sgi_cursor *pcur)
 {
      uint line_size = gdev_mem_bytes_per_scan_line((gx_device_printer*)bdev);
-     byte *data = (byte*)gs_malloc(bdev->memory, line_size, 1, "sgi_begin_page");
-     IMAGE *header= (IMAGE*)gs_malloc(bdev->memory, sizeof(IMAGE),1,"sgi_begin_page");
+     byte *data;
+     IMAGE *header;
      char filler= '\0';
      int i;
 
-     if ((data == (byte*)0)||(header == (IMAGE*)0)) return -1;
+     data = (byte*)gs_malloc(bdev->memory, line_size, 1, "sgi_begin_page");
+     if (data == (byte*)0) return -1;
+
+     header= (IMAGE*)gs_malloc(bdev->memory, sizeof(IMAGE),1,"sgi_begin_page");
+     if (header == (IMAGE*)0)
+       {
+	 gs_free(bdev->memory,data,line_size,1,"sgi_begin_page(failed)");
+	 return -1;
+       }
 
      bzero(header,sizeof(IMAGE));
      header->imagic = IMAGIC;
@@ -95,6 +103,7 @@ sgi_begin_page(gx_device_printer *bdev, 
      pcur->bpp = bdev->color_info.depth;
      pcur->line_size = line_size;
      pcur->data = data;
+     gs_free(bdev->memory,header,sizeof(IMAGE),1,"sgi_begin_page");
      return 0;
 }
 
@@ -115,12 +124,21 @@ sgi_print_page(gx_device_printer *pdev, 
        int code = sgi_begin_page(bdev, pstream, &cur);
        uint bpe, mask;
        int separation;
-       long *rowsizes=(long*)gs_malloc(pdev->memory, 4,3*bdev->height,"sgi_print_page");
+       long *rowsizes;
        byte *edata ;
        long lastval;
        int rownumber;
-#define aref2(a,b) a*bdev->height+b
-       edata =  (byte*)gs_malloc(pdev->memory, cur.line_size, 1, "sgi_begin_page");
+#define aref2(a,b) ((a)*bdev->height)+(b)
+       if(code<0) return(-1);
+       rowsizes = (long*)gs_malloc(pdev->memory,sizeof(long),3*bdev->height,"sgi_print_page");
+       if(rowsizes==(long*)NULL) return(-1);
+       bzero(rowsizes,sizeof(long)*3*bdev->height);
+       edata = (byte*)gs_malloc(pdev->memory, cur.line_size, 1, "sgi_begin_page");
+       if(edata==(byte*)NULL)
+	 {
+	   gs_free(pdev->memory,rowsizes,sizeof(long),3*bdev->height,"sgi_print_page");
+	   return(-1);
+	 }
        if((code<0)||(rowsizes==(long*)NULL)||(edata==(byte*)NULL)) return(-1);
        fwrite(rowsizes,sizeof(long),3*bdev->height,pstream); /* rowstarts */
        fwrite(rowsizes,sizeof(long),3*bdev->height,pstream); /* rowsizes */
@@ -215,9 +233,8 @@ sgi_print_page(gx_device_printer *pdev, 
 	    fputc((char)(lastval>>16),pstream);
 	    fputc((char)(lastval>>8),pstream);
 	    fputc((char)(lastval),pstream);}
-       gs_free(pdev->memory, (char*)cur.data, cur.line_size, 1,
-		 "sgi_print_page(done)");
-       gs_free(pdev->memory, (char*)edata, cur.line_size, 1, "sgi_print_page(done)");
-       gs_free(pdev->memory, (char*)rowsizes,4,3*bdev->height,"sgi_print_page(done)");
+       gs_free(pdev->memory, cur.data, cur.line_size, 1, "sgi_print_page(done)");
+       gs_free(pdev->memory, edata, cur.line_size, 1, "sgi_print_page(done)");
+       gs_free(pdev->memory, rowsizes,4,3*bdev->height,"sgi_print_page(done)");
        return (code < 0 ? code : 0);
 }
openSUSE Build Service is sponsored by