Commit: 8ca457f64dadff756831bc61abf479a4159b2072 Author: Anatoliy Belsky <a...@php.net> Thu, 7 Jun 2012 16:27:47 +0200 Parents: e8838926644cfb9a0ec9525a5b519da15b3e022a Branches: PHP-5.3 PHP-5.4 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=8ca457f64dadff756831bc61abf479a4159b2072 Log: fixed bc break related to #57905 Bugs: https://bugs.php.net/57905 Changed paths: M ext/zip/lib/zip_open.c Diff: diff --git a/ext/zip/lib/zip_open.c b/ext/zip/lib/zip_open.c index 2f56881..a348d98 100644 --- a/ext/zip/lib/zip_open.c +++ b/ext/zip/lib/zip_open.c @@ -206,7 +206,9 @@ _zip_readcdir(FILE *fp, off_t buf_offset, unsigned char *buf, unsigned char *eoc cd->comment = NULL; cd->comment_len = _zip_read2(&cdp); - if (((zip_uint64_t)cd->offset)+cd->size > buf_offset + (eocd-buf)) { + /* without checking the ZIP_CHECKCONS flag we'll not able even to open inconsistent + archives at this place, which would break bc in PHP */ + if ((ZIP_CHECKCONS == (flags & ZIP_CHECKCONS)) && ((zip_uint64_t)cd->offset)+cd->size > buf_offset + (eocd-buf)) { /* cdir spans past EOCD record */ _zip_error_set(error, ZIP_ER_INCONS, 0); cd->nentry = 0; @@ -237,7 +239,13 @@ _zip_readcdir(FILE *fp, off_t buf_offset, unsigned char *buf, unsigned char *eoc } } - if (cd->offset >= buf_offset) { + /* the first if branch goes the old way of libzip 0.9 so we don't loose + the bc for reading inconsistent files */ + if ((ZIP_CHECKCONS != (flags & ZIP_CHECKCONS)) && cd->size < (unsigned int)(eocd-buf)) { + cdp = eocd - cd->size; + bufp = &cdp; + } + else if (cd->offset >= buf_offset) { /* if buffer already read in, use it */ cdp = buf + (cd->offset - buf_offset); bufp = &cdp; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php