fix resource leaks on error (#2125)

This commit is contained in:
Frank Warmerdam 2009-11-30 18:42:53 +00:00
parent 199977b6af
commit b7b6095407
4 changed files with 15 additions and 3 deletions

View File

@ -1,5 +1,9 @@
2009-11-30 Frank Warmerdam <warmerdam@pobox.com>
* contrib/dbs/tiff-grayscale.c, contrib/tif-palette.c,
tools/ras2tiff.c: Fix resource leaks on error.
http://bugzilla.maptools.org/show_bug.cgi?id=2121
* libtiff/tif_{aux.c,dir.c,dir.h,dirinfo.c}: Return to handling
TIFFTAG_REFERENCEBLACKWHITE as a field in the TIFF directory instead
of as a custom(generic) field to avoid a potential reentrancy problem.

View File

@ -1,4 +1,4 @@
/* $Id: tiff-grayscale.c,v 1.4 2004-09-03 08:26:08 dron Exp $ */
/* $Id: tiff-grayscale.c,v 1.5 2009-11-30 18:42:53 fwarmerdam Exp $ */
/*
* tiff-grayscale.c -- create a Class G (grayscale) TIFF file
@ -86,6 +86,7 @@ int main(int argc, char **argv)
if ((tif = TIFFOpen(argv[3], "w")) == NULL) {
fprintf(stderr, "can't open %s as a TIFF file\n", argv[3]);
free(gray);
return 0;
}

View File

@ -1,4 +1,4 @@
/* $Id: tiff-palette.c,v 1.3 2004-09-03 08:27:20 dron Exp $ */
/* $Id: tiff-palette.c,v 1.4 2009-11-30 18:42:53 fwarmerdam Exp $ */
/*
* tiff-palette.c -- create a Class P (palette) TIFF file
@ -219,6 +219,7 @@ int main(int argc, char **argv)
if ((tif = TIFFOpen(argv[3], "w")) == NULL) {
fprintf(stderr, "can't open %s as a TIFF file\n", argv[3]);
free(red);free(green);free(blue);
return 0;
}

View File

@ -1,4 +1,4 @@
/* $Id: ras2tiff.c,v 1.16 2009-01-22 20:53:07 fwarmerdam Exp $ */
/* $Id: ras2tiff.c,v 1.17 2009-11-30 18:42:53 fwarmerdam Exp $ */
/*
* Copyright (c) 1988-1997 Sam Leffler
@ -94,6 +94,7 @@ main(int argc, char* argv[])
}
if (fread(&h, sizeof (h), 1, in) != 1) {
fprintf(stderr, "%s: Can not read header.\n", argv[optind]);
fclose(in);
return (-2);
}
if (strcmp(h.ras_magic, RAS_MAGIC) == 0) {
@ -118,11 +119,15 @@ main(int argc, char* argv[])
#endif
} else {
fprintf(stderr, "%s: Not a rasterfile.\n", argv[optind]);
fclose(in);
return (-3);
}
out = TIFFOpen(argv[optind+1], "w");
if (out == NULL)
{
fclose(in);
return (-4);
}
TIFFSetField(out, TIFFTAG_IMAGEWIDTH, (uint32) h.ras_width);
TIFFSetField(out, TIFFTAG_IMAGELENGTH, (uint32) h.ras_height);
TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
@ -224,6 +229,7 @@ main(int argc, char* argv[])
break;
}
(void) TIFFClose(out);
fclose(in);
return (0);
}