- made the silently failing message parser raise some errors
[m6w6/ext-http] / http_encoding_api.c
index f5c04949a4a7e8a68017b3e813a5f89286b18f36..d3529d14c15edb038d1e51eb41c31d99a5d1a895 100644 (file)
@@ -74,6 +74,8 @@ PHP_HTTP_API const char *_http_encoding_dechunk(const char *encoded, size_t enco
                
                /* reached the end */
                if (!chunk_len) {
+                       /* move over '0' chunked encoding terminator */
+                       while (*e_ptr == '0') ++e_ptr;
                        break;
                }
 
@@ -397,11 +399,14 @@ PHP_HTTP_API STATUS _http_encoding_gzencode(int level, const char *data, size_t
        
        http_init_gzencode_buffer(&Z, data, data_len, encoded);
        
-       if (    (Z_OK == (status = deflateInit2(&Z, level, Z_DEFLATED, -MAX_WBITS, MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY))) &&
-                       (Z_STREAM_END == (status = deflate(&Z, Z_FINISH))) &&
-                       (Z_OK == (status = deflateEnd(&Z)))) {
-               *encoded_len = http_finish_gzencode_buffer(&Z, data, data_len, encoded);
-               return SUCCESS;
+       if (Z_OK == (status = deflateInit2(&Z, level, Z_DEFLATED, -MAX_WBITS, MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY))) {
+               status = deflate(&Z, Z_FINISH);
+               deflateEnd(&Z);
+               
+               if (Z_STREAM_END == status) {
+                       *encoded_len = http_finish_gzencode_buffer(&Z, data, data_len, encoded);
+                       return SUCCESS;
+               }
        }
        
        efree(*encoded);
@@ -416,11 +421,14 @@ PHP_HTTP_API STATUS _http_encoding_deflate(int level, const char *data, size_t d
        
        http_init_deflate_buffer(&Z, data, data_len, encoded);
        
-       if (    (Z_OK == (status = deflateInit2(&Z, level, Z_DEFLATED, -MAX_WBITS, MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY))) &&
-                       (Z_STREAM_END == (status = deflate(&Z, Z_FINISH))) &&
-                       (Z_OK == (status = deflateEnd(&Z)))) {
-               *encoded_len = http_finish_buffer(Z.total_out, encoded);
-               return SUCCESS;
+       if (Z_OK == (status = deflateInit2(&Z, level, Z_DEFLATED, -MAX_WBITS, MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY))) {
+               status = deflate(&Z, Z_FINISH);
+               deflateEnd(&Z);
+               
+               if (Z_STREAM_END == status) {
+                       *encoded_len = http_finish_buffer(Z.total_out, encoded);
+                       return SUCCESS;
+               }
        }
        
        efree(encoded);
@@ -467,16 +475,12 @@ PHP_HTTP_API STATUS _http_encoding_inflate(const char *data, size_t data_len, ch
        do {
                http_init_inflate_buffer(&Z, data, data_len, decoded, decoded_len, &max);
                if (Z_OK == (status = inflateInit2(&Z, -MAX_WBITS))) {
-                       if (Z_STREAM_END == (status = inflate(&Z, Z_FINISH))) {
-                               if (Z_OK == (status = inflateEnd(&Z))) {
-                                       *decoded_len = http_finish_buffer(Z.total_out, decoded);
-                                       return SUCCESS;
-                               }
-                       } else {
-                               inflateEnd(&Z);
-                               if (status == Z_OK) {
-                                       status = Z_BUF_ERROR;
-                               }
+                       status = inflate(&Z, Z_FINISH);
+                       inflateEnd(&Z);
+                       
+                       if (Z_STREAM_END == status) {
+                               *decoded_len = http_finish_buffer(Z.total_out, decoded);
+                               return SUCCESS;
                        }
                }
        } while (++max < HTTP_ENCODING_MAXTRY && status == Z_BUF_ERROR);