--- leptonlib-1.52/src/tiffio.c 2007-11-25 01:15:25.000000000 +0300 +++ leptonlib-1.52.my/src/tiffio.c 2007-12-21 18:43:05.000000000 +0300 @@ -223,8 +223,11 @@ if ((linebuf = (l_uint8 *)CALLOC(tiffbpl + 1, sizeof(l_uint8))) == NULL) return (PIX *)ERROR_PTR("calloc fail for linebuf", procName, NULL); - if ((pix = pixCreate(w, h, d)) == NULL) + if ((pix = pixCreate(w, h, d)) == NULL) { + FREE(linebuf); return (PIX *)ERROR_PTR("pix not made", procName, NULL); + } + data = (l_uint8 *)pixGetData(pix); wpl = pixGetWpl(pix); bpl = 4 * wpl; @@ -232,8 +235,11 @@ /* Read the data */ if (spp == 1) { for (i = 0 ; i < h ; i++) { - if (TIFFReadScanline(tif, linebuf, i, 0) < 0) + if (TIFFReadScanline(tif, linebuf, i, 0) < 0) { + FREE(linebuf); + pixDestroy(&pix); return (PIX *)ERROR_PTR("line read fail", procName, NULL); + } memcpy((char *)data, (char *)linebuf, tiffbpl); data += bpl; } @@ -246,8 +252,11 @@ line = pixGetData(pix); for (i = 0 ; i < h ; i++, line += wpl) { - if (TIFFReadScanline(tif, linebuf, i, 0) < 0) + if (TIFFReadScanline(tif, linebuf, i, 0) < 0) { + FREE(linebuf); + pixDestroy(&pix); return (PIX *)ERROR_PTR("line read fail", procName, NULL); + } for (j = 0, k = 0, ppixel = line; j < w; j++) { SET_DATA_BYTE(ppixel, COLOR_RED, linebuf[k++]); SET_DATA_BYTE(ppixel, COLOR_GREEN, linebuf[k++]); @@ -271,8 +280,11 @@ * tiff colormap components are 16 bit unsigned, * and go from black (0) to white (0xffff), the * the pix cmap takes the most significant byte. */ - if ((cmap = pixcmapCreate(bps)) == NULL) + if ((cmap = pixcmapCreate(bps)) == NULL) { + FREE(linebuf); + pixDestroy(&pix); return (PIX *)ERROR_PTR("cmap not made", procName, NULL); + } ncolors = 1 << bps; for (i = 0; i < ncolors; i++) pixcmapAddColor(cmap, redmap[i] >> 8, greenmap[i] >> 8,