]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: sink: Return an allocation failure in __sink_new if strdup() fails
authorTim Duesterhus <tim@bastelstu.be>
Sun, 3 Jan 2021 18:54:11 +0000 (19:54 +0100)
committerWilly Tarreau <w@1wt.eu>
Sun, 3 Jan 2021 19:35:45 +0000 (20:35 +0100)
This patch fixes GitHub issue #1023.

The function was introduced in commit 99c453d ("MEDIUM: ring: new
section ring to declare custom ring buffers."), which first appeared
in 2.2-dev9. The fix should be backported to 2.2+.

src/sink.c

index 35bf7707c404904470d21b6e1557fd02815814b9..15fc47597ed655edc00b013bb3b2d1719bd96e64 100644 (file)
@@ -63,7 +63,13 @@ static struct sink *__sink_new(const char *name, const char *desc, int fmt)
                goto end;
 
        sink->name = strdup(name);
+       if (!sink->name)
+               goto err;
+
        sink->desc = strdup(desc);
+       if (!sink->desc)
+               goto err;
+
        sink->fmt  = fmt;
        sink->type = SINK_TYPE_NEW;
        sink->maxlen = BUFSIZE;
@@ -74,6 +80,13 @@ static struct sink *__sink_new(const char *name, const char *desc, int fmt)
        LIST_ADDQ(&sink_list, &sink->sink_list);
  end:
        return sink;
+
+ err:
+       free(sink->name); sink->name = NULL;
+       free(sink->desc); sink->desc = NULL;
+       free(sink); sink = NULL;
+
+       return NULL;
 }
 
 /* creates a sink called <name> of type FD associated to fd <fd>, format <fmt>,