diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-05-03 20:41:22 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-05-03 20:41:22 (GMT) |
commit | 47d7aa4020e2cd163aeba6435d2a701ad48bee45 (patch) | |
tree | 7bd7477b079cef72b27e17b8aad253e764424f27 /compat/zlib/contrib/minizip/mztools.c | |
parent | 8124b5fb585273485814508c23908f35f44d3fba (diff) | |
download | tcl-47d7aa4020e2cd163aeba6435d2a701ad48bee45.zip tcl-47d7aa4020e2cd163aeba6435d2a701ad48bee45.tar.gz tcl-47d7aa4020e2cd163aeba6435d2a701ad48bee45.tar.bz2 |
zlib-1.2.7
Diffstat (limited to 'compat/zlib/contrib/minizip/mztools.c')
-rw-r--r-- | compat/zlib/contrib/minizip/mztools.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/compat/zlib/contrib/minizip/mztools.c b/compat/zlib/contrib/minizip/mztools.c index f9092e6..96891c2 100644 --- a/compat/zlib/contrib/minizip/mztools.c +++ b/compat/zlib/contrib/minizip/mztools.c @@ -42,7 +42,7 @@ uLong* bytesRecovered; int entries = 0; uLong totalBytes = 0; char header[30]; - char filename[256]; + char filename[1024]; char extra[1024]; int offset = 0; int offsetCD = 0; @@ -73,9 +73,14 @@ uLong* bytesRecovered; /* Filename */ if (fnsize > 0) { - if (fread(filename, 1, fnsize, fpZip) == fnsize) { - if (fwrite(filename, 1, fnsize, fpOut) == fnsize) { - offset += fnsize; + if (fnsize < sizeof(filename)) { + if (fread(filename, 1, fnsize, fpZip) == fnsize) { + if (fwrite(filename, 1, fnsize, fpOut) == fnsize) { + offset += fnsize; + } else { + err = Z_ERRNO; + break; + } } else { err = Z_ERRNO; break; @@ -91,9 +96,14 @@ uLong* bytesRecovered; /* Extra field */ if (extsize > 0) { - if (fread(extra, 1, extsize, fpZip) == extsize) { - if (fwrite(extra, 1, extsize, fpOut) == extsize) { - offset += extsize; + if (extsize < sizeof(extra)) { + if (fread(extra, 1, extsize, fpZip) == extsize) { + if (fwrite(extra, 1, extsize, fpOut) == extsize) { + offset += extsize; + } else { + err = Z_ERRNO; + break; + } } else { err = Z_ERRNO; break; |