diff options
Diffstat (limited to 'dbus/dbus-marshal.c')
-rw-r--r-- | dbus/dbus-marshal.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/dbus/dbus-marshal.c b/dbus/dbus-marshal.c index e19e36bb..7524452b 100644 --- a/dbus/dbus-marshal.c +++ b/dbus/dbus-marshal.c @@ -2116,7 +2116,10 @@ _dbus_marshal_validate_arg (const DBusString *str, len = demarshal_and_validate_len (str, byte_order, pos, &pos); if (len < 0) - return FALSE; + { + _dbus_verbose ("invalid array length (<0)\n"); + return FALSE; + } if (len > _dbus_string_get_length (str) - pos) { @@ -2126,10 +2129,13 @@ _dbus_marshal_validate_arg (const DBusString *str, end = pos + len; - if (!validate_array_data (str, byte_order, depth + 1, - array_type, array_type_pos, - pos, &pos, end)) - return FALSE; + if (len > 0 && !validate_array_data (str, byte_order, depth + 1, + array_type, array_type_pos, + pos, &pos, end)) + { + _dbus_verbose ("invalid array data\n"); + return FALSE; + } if (pos < end) { |