/* {{{ char *http_chunked_decode(char *, size_t, char **, size_t *) */
-PHP_HTTP_API char *_http_chunked_decode(const char *encoded, size_t encoded_len,
+PHP_HTTP_API const char *_http_chunked_decode(const char *encoded, size_t encoded_len,
char **decoded, size_t *decoded_len TSRMLS_DC)
{
const char *e_ptr;
hex_len[i++] = *e_ptr++;
}
- /* reached the end */
- if (!strcmp(hex_len, "0")) {
- break;
- }
-
- /* new line */
- if (strncmp(e_ptr, HTTP_CRLF, 2)) {
- http_error_ex(E_WARNING, HTTP_E_PARSE,
- "Invalid character (expected 0x0D 0x0A; got: 0x%x(%c) 0x%x(%c))",
- *e_ptr, *e_ptr, *(e_ptr + 1), *(e_ptr + 1));
- efree(*decoded);
- return NULL;
- }
-
/* hex to long */
{
char *error = NULL;
}
}
+ /* reached the end */
+ if (!chunk_len) {
+ break;
+ }
+
+ /* new line */
+ if (strncmp(e_ptr, HTTP_CRLF, 2)) {
+ http_error_ex(E_WARNING, HTTP_E_PARSE,
+ "Invalid character (expected 0x0D 0x0A; got: 0x%x 0x%x)", *e_ptr, *(e_ptr + 1));
+ efree(*decoded);
+ return NULL;
+ }
+
memcpy(d_ptr, e_ptr += 2, chunk_len);
d_ptr += chunk_len;
e_ptr += chunk_len + 2;
memcpy(*body, real_body, *body_len);
}
- return http_parse_headers_ex(header, real_body ? response_len - *body_len : response_len, headers, 1);
+ return http_parse_headers_ex(header, headers, 1);
}
/* }}} */