From: Colin Walters Date: Wed, 1 Apr 2009 16:02:00 +0000 (-0400) Subject: Bug 17803 - Fix both test case and validation logic X-Git-Tag: dbus-1.2.14~11 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b5a1f3c54a48ea3079622b0ec3023c79b95ed135;p=thirdparty%2Fdbus.git Bug 17803 - Fix both test case and validation logic The previous commit had errors in both the test case and the validation logic. The test case was missing a trailing comma before the previous one, so we weren't testing the signature we thought we were. The validation logic was wrong because if the type was not valid, we'd drop through the entire if clause, and thus skip returning an error code, and accept the signature. --- diff --git a/dbus/dbus-marshal-validate-util.c b/dbus/dbus-marshal-validate-util.c index 5365d6d35..ac901c38b 100644 --- a/dbus/dbus-marshal-validate-util.c +++ b/dbus/dbus-marshal-validate-util.c @@ -227,7 +227,7 @@ _dbus_marshal_validate_test (void) "not a valid signature", "123", ".", - "(" + "(", "a{(ii)i}" /* https://bugs.freedesktop.org/show_bug.cgi?id=17803 */ }; diff --git a/dbus/dbus-marshal-validate.c b/dbus/dbus-marshal-validate.c index 35998cbb2..ee955485c 100644 --- a/dbus/dbus-marshal-validate.c +++ b/dbus/dbus-marshal-validate.c @@ -246,14 +246,15 @@ _dbus_validate_signature_with_reason (const DBusString *type_str, } } - if (last == DBUS_DICT_ENTRY_BEGIN_CHAR && - _dbus_type_is_valid (*p) && - !dbus_type_is_basic (*p)) + if (last == DBUS_DICT_ENTRY_BEGIN_CHAR) { - result = DBUS_INVALID_DICT_KEY_MUST_BE_BASIC_TYPE; - goto out; + if (!(_dbus_type_is_valid (*p) && dbus_type_is_basic (*p))) + { + result = DBUS_INVALID_DICT_KEY_MUST_BE_BASIC_TYPE; + goto out; + } } - + last = *p; ++p; }