/* $Id$ */
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
#define HTTP_WANT_ZLIB
#include "php_http.h"
php_stream_bucket_append(buckets_out, __buck TSRMLS_CC); \
}
-typedef struct {
+typedef struct _http_chunked_decode_filter_buffer_t {
phpstr buffer;
ulong hexlen;
} HTTP_FILTER_BUFFER(chunked_decode);
/* ignore preceeding CRLFs (too loose?) */
while (off < PHPSTR_LEN(buffer) && (
- PHPSTR_VAL(buffer)[off] == 0xa ||
- PHPSTR_VAL(buffer)[off] == 0xd)) {
+ PHPSTR_VAL(buffer)[off] == '\n' ||
+ PHPSTR_VAL(buffer)[off] == '\r')) {
++off;
}
if (off) {
if (ptr->buflen) {
http_encoding_deflate_stream_update(buffer, ptr->buf, ptr->buflen, &encoded, &encoded_len);
if (encoded) {
- out_avail = 1;
- NEW_BUCKET(encoded, encoded_len);
+ if (encoded_len) {
+ out_avail = 1;
+ NEW_BUCKET(encoded, encoded_len);
+ }
efree(encoded);
}
}
http_encoding_deflate_stream_flush(buffer, &encoded, &encoded_len);
if (encoded) {
- out_avail = 1;
- NEW_BUCKET(encoded, encoded_len);
+ if (encoded_len) {
+ out_avail = 1;
+ NEW_BUCKET(encoded, encoded_len);
+ }
efree(encoded);
}
}
http_encoding_deflate_stream_finish(buffer, &encoded, &encoded_len);
if (encoded) {
- out_avail = 1;
- NEW_BUCKET(encoded, encoded_len);
+ if (encoded_len) {
+ out_avail = 1;
+ NEW_BUCKET(encoded, encoded_len);
+ }
efree(encoded);
}
}
if (ptr->buflen) {
http_encoding_inflate_stream_update(buffer, ptr->buf, ptr->buflen, &decoded, &decoded_len);
if (decoded) {
- out_avail = 1;
- NEW_BUCKET(decoded, decoded_len);
+ if (decoded_len) {
+ out_avail = 1;
+ NEW_BUCKET(decoded, decoded_len);
+ }
efree(decoded);
}
}
http_encoding_inflate_stream_flush(buffer, &decoded, &decoded_len);
if (decoded) {
- out_avail = 1;
- NEW_BUCKET(decoded, decoded_len);
+ if (decoded_len) {
+ out_avail = 1;
+ NEW_BUCKET(decoded, decoded_len);
+ }
efree(decoded);
}
}
http_encoding_inflate_stream_finish(buffer, &decoded, &decoded_len);
if (decoded) {
- out_avail = 1;
- NEW_BUCKET(decoded, decoded_len);
+ if (decoded_len) {
+ out_avail = 1;
+ NEW_BUCKET(decoded, decoded_len);
+ }
efree(decoded);
}
}
} else
if (!strcasecmp(name, "http.inflate")) {
- int flags = p ? HTTP_ENCODING_STREAM_PERSISTENT : 0;
+ int flags = HTTP_ENCODING_STREAM_FLUSH_SYNC | (p ? HTTP_ENCODING_STREAM_PERSISTENT : 0);
HTTP_FILTER_BUFFER(inflate) *b = NULL;
if ((b = http_encoding_inflate_stream_init(NULL, flags))) {
} else
if (!strcasecmp(name, "http.deflate")) {
- int flags = p ? HTTP_ENCODING_STREAM_PERSISTENT : 0;
+ int flags = HTTP_ENCODING_STREAM_FLUSH_SYNC | (p ? HTTP_ENCODING_STREAM_PERSISTENT : 0);
HTTP_FILTER_BUFFER(deflate) *b = NULL;
if (params) {
{
case IS_ARRAY:
case IS_OBJECT:
- if (SUCCESS != zend_hash_find(HASH_OF(params), "flags", sizeof("flags"), (void **) &tmp)) {
+ if (SUCCESS != zend_hash_find(HASH_OF(params), "flags", sizeof("flags"), (void *) &tmp)) {
break;
}
default:
zval *orig = *tmp;
convert_to_long_ex(tmp);
- flags |= (Z_LVAL_PP(tmp) & 0x0fffffff);
+ flags |= (Z_LVAL_PP(tmp) & 0x00ffffff);
if (orig != *tmp) zval_ptr_dtor(tmp);
}
}