diff --git a/include/proto/http_htx.h b/include/proto/http_htx.h index e33fdbec6..26df97f27 100644 --- a/include/proto/http_htx.h +++ b/include/proto/http_htx.h @@ -47,6 +47,6 @@ unsigned int http_get_htx_hdr(const struct htx *htx, const struct ist hdr, int occ, struct http_hdr_ctx *ctx, char **vptr, size_t *vlen); unsigned int http_get_htx_fhdr(const struct htx *htx, const struct ist hdr, int occ, struct http_hdr_ctx *ctx, char **vptr, size_t *vlen); -struct htx *http_str_to_htx(struct buffer *buf, struct ist raw); +int http_str_to_htx(struct buffer *buf, struct ist raw); #endif /* _PROTO_HTTP_HTX_H */ diff --git a/src/http_htx.c b/src/http_htx.c index 07ff191c9..7f4f7e9a6 100644 --- a/src/http_htx.c +++ b/src/http_htx.c @@ -600,7 +600,7 @@ unsigned int http_get_htx_fhdr(const struct htx *htx, const struct ist hdr, return 1; } -struct htx *http_str_to_htx(struct buffer *buf, struct ist raw) +int http_str_to_htx(struct buffer *buf, struct ist raw) { struct htx *htx; struct htx_sl *sl; @@ -610,11 +610,17 @@ struct htx *http_str_to_htx(struct buffer *buf, struct ist raw) unsigned int flags = HTX_SL_F_IS_RESP; int ret = 0; + b_reset(buf); + if (!raw.len) { + buf->size = 0; + buf->area = malloc(raw.len); + return 1; + } + buf->size = global.tune.bufsize; buf->area = (char *)malloc(buf->size); if (!buf->area) goto error; - b_reset(buf); h1m_init_res(&h1m); h1m.flags |= H1_MF_NO_PHDR; @@ -663,12 +669,12 @@ struct htx *http_str_to_htx(struct buffer *buf, struct ist raw) if (!htx_add_endof(htx, HTX_BLK_EOM)) goto error; - return htx; + return 1; error: if (buf->size) free(buf->area); - return NULL; + return 0; } static int http_htx_init(void)