[glib/glib-2-38] gdbus: Ensure message matching always succeeds against path_namespace='/'



commit 6e18d05a0d7399f74084a29c378ea04373f0cb28
Author: Philip Withnall <philip withnall collabora co uk>
Date:   Wed Oct 23 15:45:15 2013 +0100

    gdbus: Ensure message matching always succeeds against path_namespace='/'
    
    This copies the fix from upstream D-Bus bug
    https://bugs.freedesktop.org/show_bug.cgi?id=70799 to the GDBusDaemon
    implementation, ensuring that matching against path_namespace='/' succeeds
    for all keys (i.e. it’s a no-op).
    
    https://bugzilla.gnome.org/show_bug.cgi?id=710726

 gio/gdbusdaemon.c |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)
---
diff --git a/gio/gdbusdaemon.c b/gio/gdbusdaemon.c
index 2393771..3631a90 100644
--- a/gio/gdbusdaemon.c
+++ b/gio/gdbusdaemon.c
@@ -596,9 +596,18 @@ match_matches (GDBusDaemon *daemon,
          break;
        case CHECK_TYPE_PATH_PREFIX:
          len = strlen (element->value);
-         if (!(g_str_has_prefix (value, element->value) &&
-               (value[len] == 0 || value[len] == '/')))
+
+         /* Make sure to handle the case of element->value == '/'. */
+         if (len == 1)
+           break;
+
+         /* Fail if there's no prefix match, or if the prefix match doesn't
+          * finish at the end of or at a separator in the @value. */
+         if (!g_str_has_prefix (value, element->value))
+           return FALSE;
+         if (value[len] != 0 && value[len] != '/')
            return FALSE;
+
          break;
        case CHECK_TYPE_PATH_RELATED:
          len = strlen (element->value);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]