diff options
author | Ralf Habacker <ralf.habacker@freenet.de> | 2021-12-08 16:02:08 +0100 |
---|---|---|
committer | Ralf Habacker <ralf.habacker@freenet.de> | 2021-12-09 12:53:18 +0100 |
commit | 5b804ed77d336770354939e24b5b09ed95d1b4ba (patch) | |
tree | d5c99f6472e09224fa0a41e8d01c8c56346f63a4 | |
parent | 1877922b800ada5d1bf3e9d9aa31874b89e54033 (diff) | |
download | dbus-5b804ed77d336770354939e24b5b09ed95d1b4ba.tar.gz |
Fix memory leaks in Windows variant of _dbus_directory_open()
If the memory is not sufficient, the created DBusString instance must be
released. This belongs to the mentioned function and
_dbus_string_init_from_string().
Fixes #360
-rw-r--r-- | dbus/dbus-string.c | 17 | ||||
-rw-r--r-- | dbus/dbus-sysdeps-util-win.c | 2 |
2 files changed, 14 insertions, 5 deletions
diff --git a/dbus/dbus-string.c b/dbus/dbus-string.c index 4c31bdc3..529a099e 100644 --- a/dbus/dbus-string.c +++ b/dbus/dbus-string.c @@ -241,8 +241,10 @@ _dbus_string_init_const_len (DBusString *str, } /** - * Initializes a string from another string. The - * string must eventually be freed with _dbus_string_free(). + * Initializes a string from another string + * + * The string must be freed with _dbus_string_free() in case of success. + * In case of error the string is freed by this function itself. * * @param str memory to hold the string * @param from instance from which the string is initialized @@ -252,9 +254,14 @@ dbus_bool_t _dbus_string_init_from_string(DBusString *str, const DBusString *from) { - if (!_dbus_string_init (str)) - return FALSE; - return _dbus_string_append (str, _dbus_string_get_const_data (from)); + if (!_dbus_string_init (str)) + return FALSE; + if (!_dbus_string_append (str, _dbus_string_get_const_data (from))) + { + _dbus_string_free (str); + return FALSE; + } + return TRUE; } /** diff --git a/dbus/dbus-sysdeps-util-win.c b/dbus/dbus-sysdeps-util-win.c index 4e23b494..c572fcd0 100644 --- a/dbus/dbus-sysdeps-util-win.c +++ b/dbus/dbus-sysdeps-util-win.c @@ -426,6 +426,7 @@ _dbus_directory_open (const DBusString *filename, { if (!_dbus_string_append (&filespec, "*")) { + _dbus_string_free (&filespec); dbus_set_error (error, DBUS_ERROR_NO_MEMORY, "Could not append filename wildcard"); return NULL; @@ -435,6 +436,7 @@ _dbus_directory_open (const DBusString *filename, { if (!_dbus_string_append (&filespec, "\\*")) { + _dbus_string_free (&filespec); dbus_set_error (error, DBUS_ERROR_NO_MEMORY, "Could not append filename wildcard 2"); return NULL; |