Check for input buffer malloc failure in examples/gzappend.c.

This commit is contained in:
Mark Adler 2012-10-11 16:10:59 -07:00
parent c4888637ea
commit e69a9ceee0

View File

@ -1,7 +1,7 @@
/* gzappend -- command to append to a gzip file /* gzappend -- command to append to a gzip file
Copyright (C) 2003, 2012 Mark Adler, all rights reserved Copyright (C) 2003, 2012 Mark Adler, all rights reserved
version 1.2, 13 Aug 2012 version 1.2, 11 Oct 2012
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the author be held liable for any damages warranty. In no event will the author be held liable for any damages
@ -39,7 +39,8 @@
* - Keep gzip file clean on appended file read errors * - Keep gzip file clean on appended file read errors
* - Use in-place rotate instead of auxiliary buffer * - Use in-place rotate instead of auxiliary buffer
* (Why you ask? Because it was fun to write!) * (Why you ask? Because it was fun to write!)
* 1.2 13 Aug 2012 - Fix for proper z_const usage * 1.2 11 Oct 2012 - Fix for proper z_const usage
* - Check for input buffer malloc failure
*/ */
/* /*
@ -400,14 +401,14 @@ local void gztack(char *name, int gd, z_stream *strm, int last)
} }
/* allocate buffers */ /* allocate buffers */
in = fd == -1 ? NULL : malloc(CHUNK); in = malloc(CHUNK);
out = malloc(CHUNK); out = malloc(CHUNK);
if (out == NULL) bye("out of memory", ""); if (in == NULL || out == NULL) bye("out of memory", "");
/* compress input file and append to gzip file */ /* compress input file and append to gzip file */
do { do {
/* get more input */ /* get more input */
len = fd == -1 ? 0 : read(fd, in, CHUNK); len = read(fd, in, CHUNK);
if (len == -1) { if (len == -1) {
fprintf(stderr, fprintf(stderr,
"gzappend warning: error reading %s, skipping rest ...\n", "gzappend warning: error reading %s, skipping rest ...\n",
@ -454,7 +455,7 @@ local void gztack(char *name, int gd, z_stream *strm, int last)
/* clean up and return */ /* clean up and return */
free(out); free(out);
if (in != NULL) free(in); free(in);
if (fd > 0) close(fd); if (fd > 0) close(fd);
} }
@ -472,7 +473,9 @@ int main(int argc, char **argv)
/* provide usage if no arguments */ /* provide usage if no arguments */
if (*argv == NULL) { if (*argv == NULL) {
printf("gzappend 1.1 (4 Nov 2003) Copyright (C) 2003 Mark Adler\n"); printf(
"gzappend 1.2 (11 Oct 2012) Copyright (C) 2003, 2012 Mark Adler\n"
);
printf( printf(
"usage: gzappend [-level] file.gz [ addthis [ andthis ... ]]\n"); "usage: gzappend [-level] file.gz [ addthis [ andthis ... ]]\n");
return 0; return 0;