]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: filters: Use filter offset to decude the amount of forwarded data
authorChristopher Faulet <cfaulet@haproxy.com>
Mon, 24 Feb 2020 15:20:09 +0000 (16:20 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 6 Mar 2020 13:12:59 +0000 (14:12 +0100)
When the tcp or http payload is filtered, it is important to use the filter
offset to decude the amount of forwarded data because this offset may change
during the call to the callback function. So we should not rely on a local
variable defined before this call.

For now, existing HAproxy filters don't change this offset, so this bug may only
affect external filters.

This patch must be forwarded as far as 1.9.

src/filters.c

index afe8c13d9f2d7ceae090df8282ec27cf02c3965f..c4601febe7a2cc1653799192c57d2c6acbe3955c 100644 (file)
@@ -626,8 +626,8 @@ flt_http_payload(struct stream *s, struct http_msg *msg, unsigned int len)
                        ret = FLT_OPS(filter)->http_payload(s, filter, msg, out + offset, data - offset);
                        if (ret < 0)
                                goto end;
+                       data = ret + *flt_off - *strm_off;
                        *flt_off += ret;
-                       data = ret + offset;
                }
        }
 
@@ -890,8 +890,8 @@ flt_tcp_payload(struct stream *s, struct channel *chn, unsigned int len)
                        ret = FLT_OPS(filter)->tcp_payload(s, filter, chn, out + offset, data - offset);
                        if (ret < 0)
                                goto end;
+                       data = ret + *flt_off - *strm_off;
                        *flt_off += ret;
-                       data = ret + offset;
                }
        }