diff options
author | Simon McVittie <smcv@collabora.com> | 2023-05-15 18:55:43 +0000 |
---|---|---|
committer | Simon McVittie <smcv@collabora.com> | 2023-05-15 18:55:43 +0000 |
commit | 16232bdd339cb8bf4ef9e7d51ce1bcafa574155a (patch) | |
tree | 025f4a00162838a6bfcb4c224d73e5a8db93d936 | |
parent | a841b8ec8f43691c07313de6d1f27f6cbd82b1ca (diff) | |
parent | b5a87e214fa5cb5728bc145cedcedaa6d82bd493 (diff) | |
download | dbus-16232bdd339cb8bf4ef9e7d51ce1bcafa574155a.tar.gz |
Merge branch 'dbus_msg_iter_fix_memleak' into 'master'
dbus_message_iter_get_signature: Fix two memory leaks
See merge request dbus/dbus!403
-rw-r--r-- | dbus/dbus-message.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/dbus/dbus-message.c b/dbus/dbus-message.c index d82e335e..b47a8638 100644 --- a/dbus/dbus-message.c +++ b/dbus/dbus-message.c @@ -2293,7 +2293,7 @@ dbus_message_iter_get_signature (DBusMessageIter *iter) { const DBusString *sig; DBusString retstr; - char *ret; + char *ret = NULL; int start, len; DBusMessageRealIter *real = (DBusMessageRealIter *)iter; @@ -2307,9 +2307,13 @@ dbus_message_iter_get_signature (DBusMessageIter *iter) if (!_dbus_string_append_len (&retstr, _dbus_string_get_const_data (sig) + start, len)) - return NULL; - if (!_dbus_string_steal_data (&retstr, &ret)) - return NULL; + goto oom; + + /* This is correct whether it succeeds or fails: on success it sets `ret`, + * and on failure it leaves `ret` set to NULL. */ + _dbus_string_steal_data (&retstr, &ret); + +oom: _dbus_string_free (&retstr); return ret; } |