X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=http_encoding_api.c;h=32072641204426fc5724ea5a7f410d37c7c71248;hb=8480134f621c302c1e1c29ee1aefe6a94f060c2b;hp=6f49ee18fa434d0aad9ef12280fcdb9edb1418c8;hpb=bc583f99affc17a9ca3eac02525e1774e0a1b08c;p=m6w6%2Fext-http diff --git a/http_encoding_api.c b/http_encoding_api.c index 6f49ee1..3207264 100644 --- a/http_encoding_api.c +++ b/http_encoding_api.c @@ -43,10 +43,12 @@ PHP_MINIT_FUNCTION(http_encoding) PHP_RINIT_FUNCTION(http_encoding) { - if (HTTP_G(send).inflate.start_auto) { + getGlobals(G); + + if (G->send.inflate.start_auto) { php_ob_set_internal_handler(_http_ob_inflatehandler, 0x1000, "http inflate", 0 TSRMLS_CC); } - if (HTTP_G(send).deflate.start_auto) { + if (G->send.deflate.start_auto) { php_ob_set_internal_handler(_http_ob_deflatehandler, 0x8000, "http deflate", 0 TSRMLS_CC); } return SUCCESS; @@ -54,6 +56,8 @@ PHP_RINIT_FUNCTION(http_encoding) PHP_RSHUTDOWN_FUNCTION(http_encoding) { + getGlobals(G); + if (G->send.deflate.stream) { http_encoding_deflate_stream_free((http_encoding_stream **) &G->send.deflate.stream); } @@ -388,7 +392,7 @@ PHP_HTTP_API STATUS _http_encoding_deflate_stream_update(http_encoding_stream *s case Z_OK: case Z_STREAM_END: /* cut processed chunk off the buffer */ - phpstr_cut(PHPSTR(s->stream.opaque), 0, data_len - s->stream.avail_in); + phpstr_cut(PHPSTR(s->stream.opaque), 0, PHPSTR_LEN(s->stream.opaque) - s->stream.avail_in); /* size buffer down to actual size */ *encoded_len -= s->stream.avail_out; @@ -432,7 +436,7 @@ retry_raw_inflate: case Z_OK: case Z_STREAM_END: /* cut off */ - phpstr_cut(PHPSTR(s->stream.opaque), 0, data_len - s->stream.avail_in); + phpstr_cut(PHPSTR(s->stream.opaque), 0, PHPSTR_LEN(s->stream.opaque) - s->stream.avail_in); /* size down */ *decoded_len -= s->stream.avail_out; @@ -463,7 +467,7 @@ PHP_HTTP_API STATUS _http_encoding_deflate_stream_flush(http_encoding_stream *s, { int status; - *encoded_len = 0x800; + *encoded_len = 0x8000; *encoded = emalloc_rel(*encoded_len); s->stream.avail_in = 0; @@ -490,38 +494,16 @@ PHP_HTTP_API STATUS _http_encoding_deflate_stream_flush(http_encoding_stream *s, PHP_HTTP_API STATUS _http_encoding_inflate_stream_flush(http_encoding_stream *s, char **decoded, size_t *decoded_len ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC TSRMLS_DC) { - int status; - - *decoded_len = 0x800; - *decoded = emalloc_rel(*decoded_len); - - s->stream.avail_in = 0; - s->stream.next_in = NULL; - s->stream.avail_out = *decoded_len; - s->stream.next_out = (Bytef *) *decoded; - - switch (status = inflate(&s->stream, Z_SYNC_FLUSH)) - { - case Z_OK: - case Z_STREAM_END: - *decoded_len = 0x800 - s->stream.avail_out; - *decoded = erealloc_rel(*decoded, *decoded_len + 1); - (*decoded)[*decoded_len] = '\0'; - return SUCCESS; - break; - } - - STR_SET(*decoded, NULL); - *decoded_len = 0; - http_error_ex(HE_WARNING, HTTP_E_ENCODING, "Failed to flush inflate stream: %s", zError(status)); - return FAILURE; + /* noop */ + *decoded = estrndup("", *decoded_len = 0); + return SUCCESS; } PHP_HTTP_API STATUS _http_encoding_deflate_stream_finish(http_encoding_stream *s, char **encoded, size_t *encoded_len ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC TSRMLS_DC) { int status; - *encoded_len = 0x800; + *encoded_len = 0x8000; *encoded = emalloc_rel(*encoded_len); /* deflate remaining input */