cataphract                               Tue, 01 Feb 2011 14:44:29 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=307917

Log:
- Fixed bug #49072 (feof never returns true for damaged file in zip).

Bug: http://bugs.php.net/49072 (Re-Opened) feof never returns true for damaged 
file in zip
      
Changed paths:
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/ext/zip/zip_stream.c

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2011-02-01 14:43:52 UTC (rev 307916)
+++ php/php-src/branches/PHP_5_3/NEWS   2011-02-01 14:44:29 UTC (rev 307917)
@@ -158,6 +158,8 @@
   . Fixed bug #53854 (Missing constants for compression type). (Richard, Adam)
   . Fixed bug #53885 (ZipArchive segfault with FL_UNCHANGED on empty archive).
     (Stas, Maksymilian Arciemowicz).
+  . Fixed bug #49072 (feof never returns true for damaged file in zip).
+    (Gustavo, Richard Quadling)

 - Fixed bug #51336 (snmprealwalk (snmp v1) does not handle end of OID tree 
correctly)
   (Boris Lytochkin)

Modified: php/php-src/branches/PHP_5_3/ext/zip/zip_stream.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/zip/zip_stream.c   2011-02-01 14:43:52 UTC 
(rev 307916)
+++ php/php-src/branches/PHP_5_3/ext/zip/zip_stream.c   2011-02-01 14:44:29 UTC 
(rev 307917)
@@ -30,11 +30,11 @@
 /* {{{ php_zip_ops_read */
 static size_t php_zip_ops_read(php_stream *stream, char *buf, size_t count 
TSRMLS_DC)
 {
-       size_t n = 0;
+       ssize_t n = 0;
        STREAM_DATA_FROM_STREAM();

        if (self->za && self->zf) {
-               n = (size_t)zip_fread(self->zf, buf, (int)count);
+               n = zip_fread(self->zf, buf, count);
                if (n < 0) {
                        int ze, se;
                        zip_file_error_get(self->zf, &ze, &se);
@@ -42,13 +42,15 @@
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Zip stream 
error: %s", zip_file_strerror(self->zf));
                        return 0;
                }
-               if (n == 0 || n < count) {
+               /* cast count to signed value to avoid possibly negative n
+                * being cast to unsigned value */
+               if (n == 0 || n < (ssize_t)count) {
                        stream->eof = 1;
                } else {
                        self->cursor += n;
                }
        }
-       return (n < 1 ? 0 : n);
+       return (n < 1 ? 0 : (size_t)n);
 }
 /* }}} */


-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to