# HG changeset patch # User Matti Hamalainen # Date 1503102002 -10800 # Node ID f0d6aac3adc414f166c79d10bab902219177141f # Parent 5bd64397453b5cb6a1d1a3ef3dee16f0adb00992 Some cleanups. diff -r 5bd64397453b -r f0d6aac3adc4 src/libgfx.c --- a/src/libgfx.c Sat Aug 19 02:17:02 2017 +0300 +++ b/src/libgfx.c Sat Aug 19 03:20:02 2017 +0300 @@ -744,6 +744,8 @@ } DMPCXData; +// Returns one byte from row buffer (of length len) at offset soffs, +// OR zero if the offset is outside buffer. static inline Uint8 dmPCXGetByte(Uint8 *row, const size_t len, const size_t soffs) { return (soffs < len) ? row[soffs] : 0; @@ -1062,49 +1064,21 @@ DMPCXHeader hdr; int res = 0; BOOL isPaletted; - pcx.buf = NULL; // Read PCX header if (!dm_fread_byte(fp, &hdr.manufacturer) || !dm_fread_byte(fp, &hdr.version) || !dm_fread_byte(fp, &hdr.encoding) || - !dm_fread_byte(fp, &hdr.bitsPerPlane)) - { - res = dmError(DMERR_FREAD, - "PCX: Could not read basic header data.\n"); - goto error; - } - - if (hdr.manufacturer != 10 || - hdr.version != 5 || - hdr.encoding != 1) - { - res = dmError(DMERR_NOT_SUPPORTED, - "PCX: Not a PCX file, or unsupported variant.\n"); - goto error; - } - - if (!dm_fread_le16(fp, &hdr.xmin) || + !dm_fread_byte(fp, &hdr.bitsPerPlane) || + !dm_fread_le16(fp, &hdr.xmin) || !dm_fread_le16(fp, &hdr.ymin) || !dm_fread_le16(fp, &hdr.xmax) || !dm_fread_le16(fp, &hdr.ymax) || !dm_fread_le16(fp, &hdr.hres) || - !dm_fread_le16(fp, &hdr.vres)) - { - res = dmError(DMERR_FREAD, - "PCX: Could not read image dimensions.\n"); - goto error; - } - - if (!dm_fread_str(fp, (Uint8 *) &hdr.colorMap, sizeof(hdr.colorMap))) - { - res = dmError(DMERR_FREAD, - "PCX: Could not read colormap.\n"); - goto error; - } - - if (!dm_fread_byte(fp, &hdr.reserved) || + !dm_fread_le16(fp, &hdr.vres) || + !dm_fread_str(fp, (Uint8 *) &hdr.colorMap, sizeof(hdr.colorMap)) || + !dm_fread_byte(fp, &hdr.reserved) || !dm_fread_byte(fp, &hdr.nplanes) || !dm_fread_le16(fp, &hdr.bpl) || !dm_fread_le16(fp, &hdr.palInfo) || @@ -1113,7 +1087,16 @@ !dm_fread_str(fp, (Uint8 *) &hdr.filler, sizeof(hdr.filler))) { res = dmError(DMERR_FREAD, - "PCX: Could not read header remainder.\n"); + "PCX: Could not read image header data.\n"); + goto error; + } + + if (hdr.manufacturer != 10 || + hdr.version > 5 || + hdr.encoding != 1) + { + res = dmError(DMERR_NOT_SUPPORTED, + "PCX: Not a PCX file, or unsupported variant.\n"); goto error; } @@ -1154,6 +1137,7 @@ goto error; } + // Sanity check bytes per line value if (hdr.bpl < (img->width * hdr.bitsPerPlane) / 8) { res = dmError(DMERR_MALLOC,