mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-04-28 10:00:40 +02:00
do_check_nonce: Don't free uninitialized memory on OOM
If _dbus_string_init() fails, it doesn't guarantee that the string
is initialized to anything in particular. Worse, if
_dbus_string_init (&buffer) fails, p would never have been initialized
at all, due to the use of the short-circuiting || operator.
Signed-off-by: Simon McVittie <smcv@collabora.com>
Reviewed-by: Philip Withnall <withnall@endlessm.com>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=103597
(cherry picked from commit 0ea0e4b0fd)
This commit is contained in:
parent
b5d1585b0f
commit
208af9a447
1 changed files with 14 additions and 0 deletions
|
|
@ -43,6 +43,20 @@ do_check_nonce (DBusSocket fd, const DBusString *nonce, DBusError *error)
|
|||
|
||||
nleft = 16;
|
||||
|
||||
/* This is a trick to make it safe to call _dbus_string_free on these
|
||||
* strings during error unwinding, even if allocating memory for them
|
||||
* fails. A constant DBusString is considered to be valid to "free",
|
||||
* even though there is nothing to free (of course the free operation
|
||||
* is trivial, because it does not own its own buffer); but
|
||||
* unlike a mutable DBusString, initializing a constant DBusString
|
||||
* cannot fail.
|
||||
*
|
||||
* We must successfully re-initialize the strings to be mutable before
|
||||
* writing to them, of course.
|
||||
*/
|
||||
_dbus_string_init_const (&buffer, "");
|
||||
_dbus_string_init_const (&p, "");
|
||||
|
||||
if ( !_dbus_string_init (&buffer)
|
||||
|| !_dbus_string_init (&p) ) {
|
||||
dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue