]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: spoe: Return an error if nothing is encoded for fragmented messages
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 10 Apr 2019 12:21:51 +0000 (14:21 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 12 Apr 2019 14:38:54 +0000 (16:38 +0200)
If the maximum frame size is very small with a large message or argument name,
it is possible to be unable to encode anything. In such case, it is important to
stop processing returning an error otherwise we will retry in loop to encode the
message, failing each time because of the too small frame size.

This patch must be backported to 1.9 and 1.8.

src/flt_spoe.c

index a7d6bb9506f7b8125e3e9113f70b71159ecf721e..703d6ba96dfe4e2e918d22a9433dd2609295cb59 100644 (file)
@@ -2287,7 +2287,9 @@ spoe_encode_messages(struct stream *s, struct spoe_context *ctx,
        return 1;
 
   too_big:
-       if (!(agent->flags & SPOE_FL_SND_FRAGMENTATION)) {
+       /* Return an error if fragmentation is unsupported or if nothing has
+        * been encoded because its too big and not splittable. */
+       if (!(agent->flags & SPOE_FL_SND_FRAGMENTATION) || p == b_head(&ctx->buffer)) {
                ctx->status_code = SPOE_CTX_ERR_TOO_BIG;
                return -1;
        }