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);
}