- fixed issues ifndef HTTP_HAVE_ZLIB and enable gzipped response decoding ifdef HAVE_ZLIB
[m6w6/ext-http] / http_encoding_api.c
index 87a4b175ceae4225d881a5acf654a2b0070a47a1..d1ce3da984441d1a839590c642aa6ed68c9433ed 100644 (file)
@@ -151,13 +151,13 @@ inline void http_init_uncompress_buffer(size_t data_len, char **buf_ptr, size_t
                *buf_ptr = emalloc(*buf_len + 1);
        } else {
                size_t new_len = *buf_len << 2;
-               char *new_ptr = erealloc(*buf_ptr, new_len + 1);
+               char *new_ptr = erealloc_recoverable(*buf_ptr, new_len + 1);
                
                if (new_ptr) {
                        *buf_ptr = new_ptr;
                        *buf_len = new_len;
                } else {
-                       *iteration = INT_MAX;
+                       *iteration = INT_MAX-1; /* avoid integer overflow on increment op */
                }
        }
 }
@@ -592,6 +592,7 @@ PHP_HTTP_API zend_bool _http_encoding_response_start(size_t content_length TSRML
                        }
                } else {
 #ifndef HTTP_HAVE_ZLIB
+                       HTTP_G(send).gzip_encoding = 0;
                        php_start_ob_buffer_named("ob_gzhandler", 0, 0 TSRMLS_CC);
 #else
                        HashTable *selected;
@@ -602,6 +603,8 @@ PHP_HTTP_API zend_bool _http_encoding_response_start(size_t content_length TSRML
                        add_next_index_stringl(&zsupported, "gzip", lenof("gzip"), 1);
                        add_next_index_stringl(&zsupported, "deflate", lenof("deflate"), 1);
                        
+                       HTTP_G(send).gzip_encoding = 0;
+                       
                        if (selected = http_negotiate_encoding(&zsupported)) {
                                STATUS hs = FAILURE;
                                char *encoding = NULL;
@@ -619,8 +622,6 @@ PHP_HTTP_API zend_bool _http_encoding_response_start(size_t content_length TSRML
                                        }
                                        if (SUCCESS == hs) {
                                                http_send_header_string("Vary: Accept-Encoding");
-                                       } else {
-                                               HTTP_G(send).gzip_encoding = 0;
                                        }
                                }
                                
@@ -629,7 +630,7 @@ PHP_HTTP_API zend_bool _http_encoding_response_start(size_t content_length TSRML
                        }
                        
                        zval_dtor(&zsupported);
-                       return 1;
+                       return HTTP_G(send).gzip_encoding;
 #endif
                }
        }