X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_encoding_api.c;h=d3529d14c15edb038d1e51eb41c31d99a5d1a895;hp=f5c04949a4a7e8a68017b3e813a5f89286b18f36;hb=33b7c5dcd9cffebb8486cb57e04958e34bbfe662;hpb=419ba9235752d56f15b393fc7969316978c6c721 diff --git a/http_encoding_api.c b/http_encoding_api.c index f5c0494..d3529d1 100644 --- a/http_encoding_api.c +++ b/http_encoding_api.c @@ -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);