[Spice-commits] 2 commits - server/reds.c server/tests

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jul 3 08:34:13 UTC 2018


 server/reds.c                      |   10 +++++++---
 server/tests/test-codecs-parsing.c |   12 ++++++++++++
 2 files changed, 19 insertions(+), 3 deletions(-)

New commits:
commit 3f6ac2bccfadf500ecf9ed8d01ec87b480e05539
Author: Frediano Ziglio <fziglio at redhat.com>
Date:   Tue Jun 26 10:52:11 2018 +0100

    reds: Fix one case parsing invalid codec string
    
    In case we pass something like "spice:mjpeg$%*" the last part is
    ignore making the string parse correctly.
    A single pair should end by either string terminator or pair terminator.
    
    Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
    Acked-by: Christophe Fergeau <cfergeau at redhat.com>

diff --git a/server/reds.c b/server/reds.c
index 09d3b778..f1e34529 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -3563,10 +3563,14 @@ static const char* parse_next_video_codec(const char *codecs, char **encoder,
     }
     int n;
     *encoder = *codec = NULL;
-    if (sscanf(codecs, "%m[0-9a-zA-Z_]:%m[0-9a-zA-Z_]%n", encoder, codec, &n) != 2) {
-        return codecs + strcspn(codecs, ";");
+    if (sscanf(codecs, "%m[0-9a-zA-Z_]:%m[0-9a-zA-Z_]%n", encoder, codec, &n) == 2) {
+        // this avoids accepting "encoder:codec" followed by garbage like "$%*"
+        if (codecs[n] != ';' && codecs[n] != '\0') {
+            free(*codec);
+            *codec = NULL;
+        }
     }
-    return codecs + n;
+    return codecs + strcspn(codecs, ";");
 }
 
 static void reds_set_video_codecs_from_string(RedsState *reds, const char *codecs)
diff --git a/server/tests/test-codecs-parsing.c b/server/tests/test-codecs-parsing.c
index 860a575e..7998501c 100644
--- a/server/tests/test-codecs-parsing.c
+++ b/server/tests/test-codecs-parsing.c
@@ -115,6 +115,12 @@ static void codecs_bad(void)
             G_LOG_LEVEL_WARNING,
             "*spice: invalid encoder:codec value*",
             TRUE,
+        },{
+            // invalid character in codec
+            "spice:mjpeg&",
+            G_LOG_LEVEL_WARNING,
+            "*spice: invalid encoder:codec value*",
+            TRUE,
         },
 #if !defined(HAVE_GSTREAMER_1_0) && !defined(HAVE_GSTREAMER_0_10)
         {
commit f4632931d5efceed546953b8bd2defead8a29649
Author: Frediano Ziglio <fziglio at redhat.com>
Date:   Tue Jun 26 10:51:51 2018 +0100

    test-codecs-parsing: Add test case
    
    Check if encoder contains an invalid character.
    
    Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
    Acked-by: Christophe Fergeau <cfergeau at redhat.com>

diff --git a/server/tests/test-codecs-parsing.c b/server/tests/test-codecs-parsing.c
index 0390a49b..860a575e 100644
--- a/server/tests/test-codecs-parsing.c
+++ b/server/tests/test-codecs-parsing.c
@@ -109,6 +109,12 @@ static void codecs_bad(void)
             G_LOG_LEVEL_WARNING,
             "*spice: unknown video codec unknown_codec",
             TRUE,
+        },{
+            // invalid characters in encoder
+            "spice&:mjpeg",
+            G_LOG_LEVEL_WARNING,
+            "*spice: invalid encoder:codec value*",
+            TRUE,
         },
 #if !defined(HAVE_GSTREAMER_1_0) && !defined(HAVE_GSTREAMER_0_10)
         {


More information about the Spice-commits mailing list