summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalf Habacker <ralf.habacker@freenet.de>2021-12-08 16:02:08 +0100
committerRalf Habacker <ralf.habacker@freenet.de>2021-12-09 12:53:18 +0100
commit5b804ed77d336770354939e24b5b09ed95d1b4ba (patch)
treed5c99f6472e09224fa0a41e8d01c8c56346f63a4
parent1877922b800ada5d1bf3e9d9aa31874b89e54033 (diff)
downloaddbus-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.c17
-rw-r--r--dbus/dbus-sysdeps-util-win.c2
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;