]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: http-ana: Report internal error if an action yields on a final eval
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 29 Oct 2024 17:09:51 +0000 (18:09 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Thu, 31 Oct 2024 08:30:52 +0000 (09:30 +0100)
This was already performed for tcp actions at content level, but not for
HTTP actions. It is always a bug, so it must be reported accordingly.

This patch may be backported to all stable versions.

src/http_ana.c

index 3b1bdda40378ab3540e8608c7fedf837a83181ff..af365ac229c418039f902c0418db8453cc28d7c7 100644 (file)
@@ -2744,6 +2744,13 @@ static enum rule_result http_req_get_intercept_rule(struct proxy *px, struct lis
                                        goto end;
                                case ACT_RET_YIELD:
                                        s->current_rule = rule;
+                                       if (act_opts & ACT_OPT_FINAL) {
+                                               send_log(s->be, LOG_WARNING,
+                                                        "Internal error: action yields while it is  no long allowed "
+                                                        "for the http-request actions.");
+                                               rule_ret = HTTP_RULE_RES_ERROR;
+                                               goto end;
+                                       }
                                        rule_ret = HTTP_RULE_RES_YIELD;
                                        goto end;
                                case ACT_RET_ERR:
@@ -2909,6 +2916,13 @@ resume_execution:
                                        goto end;
                                case ACT_RET_YIELD:
                                        s->current_rule = rule;
+                                       if (act_opts & ACT_OPT_FINAL) {
+                                               send_log(s->be, LOG_WARNING,
+                                                        "Internal error: action yields while it is no long allowed "
+                                                        "for the http-response/http-after-response actions.");
+                                               rule_ret = HTTP_RULE_RES_ERROR;
+                                               goto end;
+                                       }
                                        rule_ret = HTTP_RULE_RES_YIELD;
                                        goto end;
                                case ACT_RET_ERR: