BUG/MINOR: hlua: Detect end of request when reading data for an HTTP applet
When a script retrieves request data from an HTTP applet, line per line or
not, we must be sure to properly detect the end of the request by checking
HTX_FL_EOM flag when everything was consumed. Otherwise, the script may
hang.
It is pretty easy to reproduce the bug by calling applet:receive() without
specifying any length. If the request is not chunked, the function never
returns.
The bug was introduced when the EOM block was removed. Thus, it is specific
to the 2.4. This patch should fix the issue #1207. No backport needed.
diff --git a/src/hlua.c b/src/hlua.c
index a61809e..45ed28d 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -4420,6 +4420,12 @@
}
}
+ /* The message was fully consumed and no more data are expected
+ * (EOM flag set).
+ */
+ if (htx_is_empty(htx) && (htx->flags & HTX_FL_EOM))
+ stop = 1;
+
htx_to_buf(htx, &req->buf);
if (!stop) {
si_cant_get(si);
@@ -4506,6 +4512,12 @@
}
}
+ /* The message was fully consumed and no more data are expected
+ * (EOM flag set).
+ */
+ if (htx_is_empty(htx) && (htx->flags & HTX_FL_EOM))
+ len = 0;
+
htx_to_buf(htx, &req->buf);
/* If we are no other data available, yield waiting for new data. */