]> code.delx.au - pulseaudio/commitdiff
dbus: Check method call signatures.
authorTanu Kaskinen <tanuk@iki.fi>
Sun, 25 Mar 2012 05:40:56 +0000 (08:40 +0300)
committerTanu Kaskinen <tanuk@iki.fi>
Sun, 25 Mar 2012 05:40:56 +0000 (08:40 +0300)
BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=45815
src/pulsecore/protocol-dbus.c

index 6a0dcf344a9608bb3a5595f683c993396c32a038..03cebc1ea1c4d17c7ce199f011806d01315c54ce 100644 (file)
@@ -468,10 +468,15 @@ static enum find_result_t find_handler(struct call_info *call_info) {
         else if (!(call_info->iface_entry = pa_hashmap_get(call_info->obj_entry->interfaces, call_info->interface)))
             return NO_SUCH_INTERFACE;
 
-        else if ((call_info->method_handler = pa_hashmap_get(call_info->iface_entry->method_handlers, call_info->method)))
+        else if ((call_info->method_handler = pa_hashmap_get(call_info->iface_entry->method_handlers, call_info->method))) {
+            call_info->expected_method_sig = pa_hashmap_get(call_info->iface_entry->method_signatures, call_info->method);
+
+            if (!pa_streq(call_info->method_sig, call_info->expected_method_sig))
+                return INVALID_METHOD_SIG;
+
             return FOUND_METHOD;
 
-        else
+        else
             return NO_SUCH_METHOD;
 
     } else { /* The method call doesn't contain an interface. */