[glib/glib-2-72: 27/39] gdbusauth: empty DATA does not need a trailing space




commit 0dfffca862444cb4136bc3dbd6537f56a9c4274d
Author: Giuseppe Scrivano <giuseppe scrivano org>
Date:   Mon Sep 14 16:28:10 2020 +0200

    gdbusauth: empty DATA does not need a trailing space
    
    This is an interoperability fix. If the line is exactly "DATA\r\n",
    the reference implementation of D-Bus treats this as equivalent to
    "DATA \r\n", meaning the data block consists of zero hex-encoded bytes.
    In practice, D-Bus clients send empty data blocks as "DATA\r\n", and
    in fact sd-bus only accepts that, rejecting "DATA \r\n".
    
    [Originally part of a larger commit; commit message added by smcv]
    
    Signed-off-by: Giuseppe Scrivano <giuseppe scrivano org>
    Co-authored-by: Simon McVittie <smcv collabora com>
    Signed-off-by: Simon McVittie <smcv collabora com>
    
    (cherry-picked from commit 764f071909df70622e79ee71323973c18c055c8c)

 gio/gdbusauth.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
---
diff --git a/gio/gdbusauth.c b/gio/gdbusauth.c
index 74c178dbf5..595ab05593 100644
--- a/gio/gdbusauth.c
+++ b/gio/gdbusauth.c
@@ -784,13 +784,13 @@ _g_dbus_auth_run_client (GDBusAuth     *auth,
           if (line == NULL)
             goto out;
           debug_print ("CLIENT: WaitingForData, read='%s'", line);
-          if (g_str_has_prefix (line, "DATA "))
+          if (g_str_equal (line, "DATA") || g_str_has_prefix (line, "DATA "))
             {
               gchar *encoded;
               gchar *decoded_data;
               gsize decoded_data_len = 0;
 
-              encoded = g_strdup (line + 5);
+              encoded = g_strdup (line + 4);
               g_free (line);
               g_strstrip (encoded);
               decoded_data = hexdecode (encoded, &decoded_data_len, error);
@@ -1265,13 +1265,13 @@ _g_dbus_auth_run_server (GDBusAuth              *auth,
           debug_print ("SERVER: WaitingForData, read '%s'", line);
           if (line == NULL)
             goto out;
-          if (g_str_has_prefix (line, "DATA "))
+          if (g_str_equal (line, "DATA") || g_str_has_prefix (line, "DATA "))
             {
               gchar *encoded;
               gchar *decoded_data;
               gsize decoded_data_len = 0;
 
-              encoded = g_strdup (line + 5);
+              encoded = g_strdup (line + 4);
               g_free (line);
               g_strstrip (encoded);
               decoded_data = hexdecode (encoded, &decoded_data_len, error);


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