summaryrefslogtreecommitdiffstats
path: root/compat/zlib/contrib/minizip/mztools.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2012-05-03 20:41:22 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2012-05-03 20:41:22 (GMT)
commit47d7aa4020e2cd163aeba6435d2a701ad48bee45 (patch)
tree7bd7477b079cef72b27e17b8aad253e764424f27 /compat/zlib/contrib/minizip/mztools.c
parent8124b5fb585273485814508c23908f35f44d3fba (diff)
downloadtcl-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.c24
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;