BUG/MINOR: chunks: do not store -1 into chunk_printf() in case of error
authorWilly Tarreau <w@1wt.eu>
Wed, 22 Aug 2018 03:14:37 +0000 (05:14 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 22 Aug 2018 03:16:31 +0000 (05:16 +0200)
Since commit 843b7cb ("MEDIUM: chunks: make the chunk struct's fields
match the buffer struct") a chunk length is unsigned so we can't reliably
store -1 and check for negative values in the caller. Only one such
location was found in proto_http's http-request auth rules (which cannot
realistically fail).

No backport is needed.

src/chunk.c
src/proto_http.c

index 56070e2..7e90ee6 100644 (file)
@@ -149,10 +149,9 @@ int chunk_printf(struct buffer *chk, const char *fmt, ...)
        va_start(argp, fmt);
        ret = vsnprintf(chk->area, chk->size, fmt, argp);
        va_end(argp);
-       chk->data = ret;
 
        if (ret >= chk->size)
-               ret = -1;
+               return -1;
 
        chk->data = ret;
        return chk->data;
index 999c39e..6a1722f 100644 (file)
@@ -3845,8 +3845,7 @@ int http_process_request(struct stream *s, struct channel *req, int an_bit)
        }
 
        if (sess->fe->header_unique_id && s->unique_id) {
-               chunk_printf(&trash, "%s: %s", sess->fe->header_unique_id, s->unique_id);
-               if (trash.data < 0)
+               if (chunk_printf(&trash, "%s: %s", sess->fe->header_unique_id, s->unique_id) < 0)
                        goto return_bad_req;
                if (unlikely(http_header_add_tail2(&txn->req, &txn->hdr_idx, trash.area, trash.data) < 0))
                   goto return_bad_req;