]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-bus: fix a memory leak in message_new_reply() (#7636)
authorCong Wang <1209787+congwang@users.noreply.github.com>
Thu, 14 Dec 2017 12:07:04 +0000 (04:07 -0800)
committerLennart Poettering <lennart@poettering.net>
Thu, 14 Dec 2017 12:07:04 +0000 (13:07 +0100)
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
src/libsystemd/sd-bus/bus-message.c

index 9d4ac8ee0fd0fd99cb7eea564915d06c43747fc0..219cff1f6e7707af86d68eac9dfa96fe78d1c10f 100644 (file)
@@ -707,6 +707,7 @@ static int message_new_reply(
                 sd_bus_message **m) {
 
         sd_bus_message *t;
+        uint64_t cookie;
         int r;
 
         assert_return(call, -EINVAL);
@@ -715,6 +716,10 @@ static int message_new_reply(
         assert_return(call->bus->state != BUS_UNSET, -ENOTCONN);
         assert_return(m, -EINVAL);
 
+        cookie = BUS_MESSAGE_COOKIE(call);
+        if (cookie == 0)
+                return -EOPNOTSUPP;
+
         r = sd_bus_message_new(call->bus, &t, type);
         if (r < 0)
                 return -ENOMEM;
@@ -722,10 +727,7 @@ static int message_new_reply(
         assert(t);
 
         t->header->flags |= BUS_MESSAGE_NO_REPLY_EXPECTED;
-        t->reply_cookie = BUS_MESSAGE_COOKIE(call);
-        if (t->reply_cookie == 0)
-                return -EOPNOTSUPP;
-
+        t->reply_cookie = cookie;
         r = message_append_reply_cookie(t, t->reply_cookie);
         if (r < 0)
                 goto fail;