[X2Go-Commits] [nx-libs] 19/108: Args.c: allow options to contain URL encoded characters

git-admin at x2go.org git-admin at x2go.org
Fri Nov 9 20:35:34 CET 2018


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository nx-libs.

commit 30a96273380a53320c8950f945b1f52c111337ce
Author: Ulrich Sibiller <uli42 at gmx.de>
Date:   Thu Aug 23 23:09:44 2018 +0200

    Args.c: allow options to contain URL encoded characters
    
    Same as in nxcomp's option handling. We really only need it for ","
    (%2C) and "=" (%3D), currently, but it can handle all encoded
    characters.
---
 nx-X11/programs/Xserver/hw/nxagent/Args.c        | 35 ++++++++++++++++++++++++
 nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 |  5 ++++
 2 files changed, 40 insertions(+)

diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c
index 30e3b86..801ee0b 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Args.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c
@@ -1037,6 +1037,39 @@ int ddxProcessArgument(int argc, char *argv[], int i)
   return 0;
 }
 
+/* copy from nxcomp's Loop.cpp */
+static int
+hexval(char c) {
+    if ((c >= '0') && (c <= '9'))
+        return c - '0';
+    if ((c >= 'a') && (c <= 'f'))
+        return c - 'a' + 10;
+    if ((c >= 'A') && (c <= 'F'))
+        return c - 'A' + 10;
+    return -1;
+}
+
+static void
+URLDecodeInPlace(char *str)
+{
+  if (str) {
+    char *to = str;
+    while (str[0])
+    {
+      if ((str[0] == '%') &&
+          (hexval(str[1]) >= 0) &&
+          (hexval(str[2]) >= 0))
+      {
+        *(to++) = hexval(str[1]) * 16 + hexval(str[2]);
+        str += 3;
+      }
+      else
+        *(to++) = *(str++);
+    }
+    *to = '\0';
+  }
+}
+
 static void nxagentParseSingleOption(char *name, char *value)
 {
   int size, argc;
@@ -1048,6 +1081,8 @@ static void nxagentParseSingleOption(char *name, char *value)
               validateString(name), validateString(value));
   #endif
 
+  URLDecodeInPlace(value);
+
   if (!strcmp(name, "kbtype") ||
           !strcmp(name, "keyboard") ||
               !strcmp(name, "id") ||
diff --git a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1
index b9c81cd..6a0bfc1 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1
+++ b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1
@@ -480,6 +480,11 @@ As <proxy-port> you can pick an arbitrary (unused) TCP port or Unix
 socket file path. This is the port / socket that you have to connect to
 with the \fBnxproxy\fR application.
 .PP
+The right hand side of an option (the part following the "=" character)
+can include URL encoded characters. It is required to URL encode at
+least "," (as %2D) and "=" (as %3D) to avoid wrong parsing of the
+options string.
+.PP
 Available \fBnxagent\fR options (as an addition to nx/nx options supported
 by nxcomp already):
 .TP 8

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/nx-libs.git


More information about the x2go-commits mailing list