X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Fzip-reader.c;fp=src%2Flibpspp%2Fzip-reader.c;h=0f8c26332868f83699e460474e6c635ec5288d04;hb=d600b923ee26399f86e63e6e1a6d90ddaeb571d6;hp=92a67649fdae6b44f9025c42d2153207256fcd4b;hpb=6e03317ca14de31a0a20c567cecfb005dabf294d;p=pspp diff --git a/src/libpspp/zip-reader.c b/src/libpspp/zip-reader.c index 92a67649fd..0f8c263328 100644 --- a/src/libpspp/zip-reader.c +++ b/src/libpspp/zip-reader.c @@ -354,14 +354,19 @@ zip_reader_create (const char *filename, struct string *errs) return NULL; } - if (! get_u16 (zr->fr, &disknum)) return NULL; - if (! get_u16 (zr->fr, &disknum)) return NULL; + if (! get_u16 (zr->fr, &disknum) + || ! get_u16 (zr->fr, &disknum) - if (! get_u16 (zr->fr, &zr->n_members)) return NULL; - if (! get_u16 (zr->fr, &total_members)) return NULL; + || ! get_u16 (zr->fr, &zr->n_members) + || ! get_u16 (zr->fr, &total_members) - if (! get_u32 (zr->fr, ¢ral_dir_length)) return NULL; - if (! get_u32 (zr->fr, ¢ral_dir_start)) return NULL; + || ! get_u32 (zr->fr, ¢ral_dir_length) + || ! get_u32 (zr->fr, ¢ral_dir_start)) + { + fclose (zr->fr); + free (zr); + return NULL; + } if ( 0 != fseeko (zr->fr, central_dir_start, SEEK_SET)) {