File 0001-Avoid-argument-injection-vulnerability-in-open_envvar.patch of Package xdg-utils.7563

Index: xdg-utils-20140630/scripts/xdg-open.in
===================================================================
--- xdg-utils-20140630.orig/scripts/xdg-open.in
+++ xdg-utils-20140630/scripts/xdg-open.in
@@ -241,6 +241,11 @@ open_generic_xdg_x_scheme_handler()
     fi
 }
 
+has_single_argument()
+{
+  test $# = 1
+}
+
 open_generic()
 {
     # Paths or file:// URLs
@@ -277,23 +282,25 @@ open_generic()
 
     open_generic_xdg_x_scheme_handler "$1"
 
+    oldifs="$IFS"
     IFS=":"
     for browser in $BROWSER; do
-        if [ x"$browser" != x"" ]; then
-
-            browser_with_arg=`printf "$browser" "$1" 2>/dev/null`
-            if [ $? -ne 0 ]; then
-                browser_with_arg=$browser;
-            fi
+        IFS="$oldifs"
+        if [ -z "$browser" ]; then
+            continue
+        fi
 
-            if [ x"$browser_with_arg" = x"$browser" ]; then
-                eval '$browser "$1"'$xdg_redirect_output;
-            else eval '$browser_with_arg'$xdg_redirect_output;
-            fi
+        if echo "$browser" | grep -q %s; then
+            # Avoid argument injection.
+            # See https://bugs.freedesktop.org/show_bug.cgi?id=103807
+            # URIs don't have IFS characters spaces anyway.
+            has_single_argument $1 && $(printf "$browser" "$1")
+        else
+            $browser "$1"
+        fi
 
-            if [ $? -eq 0 ]; then
-                exit_success;
-            fi
+        if [ $? -eq 0 ]; then
+            exit_success
         fi
     done
 
openSUSE Build Service is sponsored by