diff --git a/src/modules/loaders/loader_argb.c b/src/modules/loaders/loader_argb.c index 6437494..57f3dcf 100644 --- a/src/modules/loaders/loader_argb.c +++ b/src/modules/loaders/loader_argb.c @@ -71,12 +71,22 @@ load(ImlibImage * im, ImlibProgressFunction progress, { int x; - fread(ptr, im->w, 4, f); + if (fread(ptr, im->w, 4, f) != 4) + { + free(ptr); + fclose(f); + return 0; + } for (x = 0; x < im->w; x++) SWAP32(ptr[x]); } #else - fread(ptr, im->w, 4, f); + if (fread(ptr, im->w, 4, f) != 4) + { + free(ptr); + fclose(f); + return 0; + } #endif ptr += im->w; if (progress) diff --git a/src/modules/loaders/loader_bmp.c b/src/modules/loaders/loader_bmp.c index 34ab42b..76419c4 100644 --- a/src/modules/loaders/loader_bmp.c +++ b/src/modules/loaders/loader_bmp.c @@ -208,14 +208,22 @@ load(ImlibImage * im, ImlibProgressFunction progress, if (ncols > 256) ncols = 256; for (i = 0; i < ncols; i++) - fread(&rgbQuads[i], 3, 1, f); + if (fread(&rgbQuads[i], 3, 1, f) != 1) + { + fclose(f); + return 0; + } } else { ncols /= 4; if (ncols > 256) ncols = 256; - fread(rgbQuads, 4, ncols, f); + if (fread(rgbQuads, 4, ncols, f) != ncols) + { + fclose(f); + return 0; + } } } else if (bitcount == 16 || bitcount == 32) @@ -293,12 +301,18 @@ load(ImlibImage * im, ImlibProgressFunction progress, im->data = malloc(w * h * sizeof(DATA32)); if (!im->data) { - fclose(f); free(buffer); + fclose(f); return 0; } - fread(buffer, imgsize, 1, f); + if (fread(buffer, imgsize, 1, f) != 1) + { + free(im->data); + free(buffer); + fclose(f); + return 0; + } fclose(f); buffer_ptr = buffer; buffer_end = buffer + imgsize; diff --git a/src/modules/loaders/loader_bz2.c b/src/modules/loaders/loader_bz2.c index 3cacd9e..8e33856 100644 --- a/src/modules/loaders/loader_bz2.c +++ b/src/modules/loaders/loader_bz2.c @@ -28,7 +28,8 @@ uncompress_file(FILE * fp, int dest) bytes = BZ2_bzRead(&error, bf, &outbuf, OUTBUF_SIZE); if (error == BZ_OK || error == BZ_STREAM_END) - write(dest, outbuf, bytes); + if (write(dest, outbuf, bytes) != bytes) + break; if (error == BZ_STREAM_END) break; diff --git a/src/modules/loaders/loader_png.c b/src/modules/loaders/loader_png.c index f7fe94f..7d67a5d 100644 --- a/src/modules/loaders/loader_png.c +++ b/src/modules/loaders/loader_png.c @@ -37,7 +37,11 @@ load(ImlibImage * im, ImlibProgressFunction progress, unsigned char buf[PNG_BYTES_TO_CHECK]; /* if we haven't read the header before, set the header data */ - fread(buf, 1, PNG_BYTES_TO_CHECK, f); + if (fread(buf, 1, PNG_BYTES_TO_CHECK, f) != PNG_BYTES_TO_CHECK) + { + fclose(f); + return 0; + } if (png_sig_cmp(buf, 0, PNG_BYTES_TO_CHECK)) { fclose(f); diff --git a/src/modules/loaders/loader_tiff.c b/src/modules/loaders/loader_tiff.c index 7f16383..8f340d6 100644 --- a/src/modules/loaders/loader_tiff.c +++ b/src/modules/loaders/loader_tiff.c @@ -278,7 +278,11 @@ load(ImlibImage * im, ImlibProgressFunction progress, if (!file) return 0; - fread(&magic_number, sizeof(uint16), 1, file); + if (fread(&magic_number, sizeof(uint16), 1, file) != 1) + { + fclose(file); + return 0; + } /* Apparently rewind(f) isn't sufficient */ fseek(file, (long)0, SEEK_SET); diff --git a/src/modules/loaders/loader_xpm.c b/src/modules/loaders/loader_xpm.c index 450f206..d7cca75 100644 --- a/src/modules/loaders/loader_xpm.c +++ b/src/modules/loaders/loader_xpm.c @@ -125,7 +125,12 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity, xpm_parse_done(); return 0; } - fread(s, 1, 9, f); + if (fread(s, 1, 9, f) != 9) + { + fclose(f); + xpm_parse_done(); + return 0; + } rewind(f); s[9] = 0; if (strcmp("/* XPM */", s)) diff --git a/src/modules/loaders/loader_zlib.c b/src/modules/loaders/loader_zlib.c index f15cf11..ed448bb 100644 --- a/src/modules/loaders/loader_zlib.c +++ b/src/modules/loaders/loader_zlib.c @@ -29,8 +29,8 @@ uncompress_file(int src, int dest) ret = 0; break; } - else - write(dest, outbuf, bytes); + else if (write(dest, outbuf, bytes) != bytes) + break; } gzclose(gf);