When the loop is continued early, the memory for param_rule is not freed. This
can leak memory per request, which will eventually consume all available memory
on the server.
---
 src/fcgi-app.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/fcgi-app.c b/src/fcgi-app.c
index d7285bfa6..412584c66 100644
--- a/src/fcgi-app.c
+++ b/src/fcgi-app.c
@@ -448,8 +448,10 @@ static int fcgi_flt_http_headers(struct stream *s, struct 
filter *filter, struct

                b_reset(value);
                value->data = build_logline(s, value->area, value->size, 
param_rule->value);
-               if (!value->data)
+               if (!value->data) {
+                       pool_free(pool_head_fcgi_param_rule, param_rule);
                        continue;
+               }
                if (!http_add_header(htx, param_rule->name, ist2(value->area, 
value->data)))
                        goto rewrite_err;
                pool_free(pool_head_fcgi_param_rule, param_rule);
--
2.27.0

Reply via email to