BUG/MINOR: http_htx: Support empty errorfiles

Empty error files may be used to disable the sending of any message for specific
error codes. A common use-case is to use the file "/dev/null". This way the
default error message is overridden and no message is returned to the client. It
was supported in the legacy HTTP mode, but not in HTX. Because of a bug, such
messages triggered an error.

This patch must be backported to 2.0 and 1.9. However, the patch will have to be
adapted.

(cherry picked from commit 90cc4811beec126c8057e3ea81899d1313090dfe)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
diff --git a/src/http_htx.c b/src/http_htx.c
index 0e788c1..503a869 100644
--- a/src/http_htx.c
+++ b/src/http_htx.c
@@ -600,7 +600,7 @@
 	return 1;
 }
 
-static 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 @@
 	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 @@
 	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)