summaryrefslogtreecommitdiff
path: root/src/http_content_decompress.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/http_content_decompress.cpp')
-rw-r--r--src/http_content_decompress.cpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/http_content_decompress.cpp b/src/http_content_decompress.cpp
index 0ecd9ca..ff386c2 100644
--- a/src/http_content_decompress.cpp
+++ b/src/http_content_decompress.cpp
@@ -13,7 +13,7 @@
#include <brotli/decode.h>
#include "http_decoder_inc.h"
-#define BUFFER_SIZE (16 * 1024)
+#define HTTP_DECOMPRESS_BUFFER_SIZE (4096)
struct http_content_decompress {
enum http_content_encoding encoding;
@@ -64,10 +64,6 @@ http_content_decompress_create(enum http_content_encoding encoding)
decompress->z_stream_ptr = NULL;
decompress->br_state = NULL;
- decompress->buffer = CALLOC(char, BUFFER_SIZE);
- assert(decompress->buffer);
- decompress->buffer_size = BUFFER_SIZE;
-
if (encoding == HTTP_CONTENT_ENCODING_GZIP
|| encoding == HTTP_CONTENT_ENCODING_DEFLATE) {
decompress->z_stream_ptr = CALLOC(z_stream, 1);
@@ -147,6 +143,7 @@ http_content_decompress_write_zlib(struct http_content_decompress *decompress,
size_t have = decompress->buffer_size - z_stream_ptr->avail_out;
if (have > 0) {
if (0 == z_stream_ptr->avail_out) {
+ fprintf(stderr, "realloc outbuffer,before: %zu bytes, after :%zu B\n", decompress->buffer_size , decompress->buffer_size + have); ;
decompress->buffer_size += have;
decompress->buffer = REALLOC(char, decompress->buffer,
decompress->buffer_size);
@@ -167,6 +164,8 @@ http_content_decompress_write_zlib(struct http_content_decompress *decompress,
break;
}
} while (z_stream_ptr->avail_in != 0);
+ decompress->buffer = NULL;
+ decompress->buffer_size = 0;
return 0;
}
@@ -205,15 +204,16 @@ http_content_decompress_write_br(struct http_content_decompress *decompress,
if (ret == BROTLI_DECODER_RESULT_SUCCESS ||
ret == BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT) {
+ decompress->buffer =NULL;
+ decompress->buffer_size = 0;
return 0;
}
if (ret == BROTLI_DECODER_RESULT_ERROR) {
BrotliDecoderErrorCode errcode =
BrotliDecoderGetErrorCode(decompress->br_state);
- // http_decoder_log(ERROR,
- // "BrotliDecoderDecompressStream() failed: errno = %d, %s",
- // errcode, BrotliDecoderErrorString(errcode));
+ *outdata = NULL;
+ *outdata_len = 0;
return -1;
}
@@ -234,6 +234,12 @@ int http_content_decompress_write(struct http_content_decompress *decompress,
*outdata = NULL;
*outdata_len = 0;
+ if(NULL == decompress->buffer ){
+ decompress->buffer = CALLOC(char, HTTP_DECOMPRESS_BUFFER_SIZE);
+ assert(decompress->buffer);
+ decompress->buffer_size = HTTP_DECOMPRESS_BUFFER_SIZE;
+ }
+
if (decompress->encoding == HTTP_CONTENT_ENCODING_GZIP ||
decompress->encoding == HTTP_CONTENT_ENCODING_DEFLATE) {
return http_content_decompress_write_zlib(decompress, indata, indata_len,