[git/f14/master] cherry-pick: "Do not unquote + into ' ' in URLs"

tomspur tomspur at fedoraproject.org
Fri Jul 30 21:04:21 UTC 2010


commit 1a643002343035e03157e7ee8db0447be7270874
Author: Thomas Spura <tomspur at fedoraproject.org>
Date:   Fri Jul 30 22:52:13 2010 +0200

    cherry-pick: "Do not unquote + into ' ' in URLs"
    
    There are problems with this bug in dist-git.

 git-1.7.2.1-730220de.patch |   86 ++++++++++++++++++++++++++++++++++++++++++++
 git.spec                   |    9 ++++-
 2 files changed, 94 insertions(+), 1 deletions(-)
---
diff --git a/git-1.7.2.1-730220de.patch b/git-1.7.2.1-730220de.patch
new file mode 100644
index 0000000..fdf4d2e
--- /dev/null
+++ b/git-1.7.2.1-730220de.patch
@@ -0,0 +1,86 @@
+commit 730220de8be669257287e9a1f5dde349ace5426a
+Author: Thomas Rast <trast at student.ethz.ch>
+Date:   Sat Jul 24 16:49:04 2010 +0200
+
+    Do not unquote + into ' ' in URLs
+    
+    Since 9d2e942 (decode file:// and ssh:// URLs, 2010-05-23) the URL
+    logic unquotes escaped URLs.  For the %2B type of escape, this is
+    conformant with RFC 2396.  However, it also unquotes + into a space
+    character, which is only appropriate for the query strings in HTTP.
+    This notably broke fetching from the gtk+ repository.
+    
+    We cannot just remove the corresponding code since the same
+    url_decode_internal() is also used by the HTTP backend to decode query
+    parameters.  Introduce a new argument that controls whether the +
+    decoding happens, and use it only in the (client-side) url_decode().
+    
+    Reported-by: Jasper St. Pierre <jstpierre at mecheye.net>
+    Signed-off-by: Thomas Rast <trast at student.ethz.ch>
+    Signed-off-by: Junio C Hamano <gitster at pobox.com>
+
+diff --git a/t/t5601-clone.sh b/t/t5601-clone.sh
+index 8abb71a..4431dfd 100755
+--- a/t/t5601-clone.sh
++++ b/t/t5601-clone.sh
+@@ -178,8 +178,14 @@ test_expect_success 'clone respects global branch.autosetuprebase' '
+ 
+ test_expect_success 'respect url-encoding of file://' '
+ 	git init x+y &&
+-	test_must_fail git clone "file://$PWD/x+y" xy-url &&
+-	git clone "file://$PWD/x%2By" xy-url
++	git clone "file://$PWD/x+y" xy-url-1 &&
++	git clone "file://$PWD/x%2By" xy-url-2
++'
++
++test_expect_success 'do not query-string-decode + in URLs' '
++	rm -rf x+y &&
++	git init "x y" &&
++	test_must_fail git clone "file://$PWD/x+y" xy-no-plus
+ '
+ 
+ test_expect_success 'do not respect url-encoding of non-url path' '
+diff --git a/url.c b/url.c
+index 2306236..cd8f74f 100644
+--- a/url.c
++++ b/url.c
+@@ -67,7 +67,8 @@ static int url_decode_char(const char *q)
+ 	return val;
+ }
+ 
+-static char *url_decode_internal(const char **query, const char *stop_at, struct strbuf *out)
++static char *url_decode_internal(const char **query, const char *stop_at,
++				 struct strbuf *out, int decode_plus)
+ {
+ 	const char *q = *query;
+ 
+@@ -90,7 +91,7 @@ static char *url_decode_internal(const char **query, const char *stop_at, struct
+ 			}
+ 		}
+ 
+-		if (c == '+')
++		if (decode_plus && c == '+')
+ 			strbuf_addch(out, ' ');
+ 		else
+ 			strbuf_addch(out, c);
+@@ -110,17 +111,17 @@ char *url_decode(const char *url)
+ 		strbuf_add(&out, url, colon - url);
+ 		url = colon;
+ 	}
+-	return url_decode_internal(&url, NULL, &out);
++	return url_decode_internal(&url, NULL, &out, 0);
+ }
+ 
+ char *url_decode_parameter_name(const char **query)
+ {
+ 	struct strbuf out = STRBUF_INIT;
+-	return url_decode_internal(query, "&=", &out);
++	return url_decode_internal(query, "&=", &out, 1);
+ }
+ 
+ char *url_decode_parameter_value(const char **query)
+ {
+ 	struct strbuf out = STRBUF_INIT;
+-	return url_decode_internal(query, "&", &out);
++	return url_decode_internal(query, "&", &out, 1);
+ }
diff --git a/git.spec b/git.spec
index 3b15654..3be1405 100644
--- a/git.spec
+++ b/git.spec
@@ -7,7 +7,7 @@
 
 Name:           git
 Version:        1.7.2.1
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        Fast Version Control System
 License:        GPLv2
 Group:          Development/Tools
@@ -23,6 +23,9 @@ Patch0:         git-1.5-gitweb-home-link.patch
 Patch1:         git-cvsimport-Ignore-cvsps-2.2b1-Branches-output.patch
 # https://bugzilla.redhat.com/500137
 Patch2:         git-1.6-update-contrib-hooks-path.patch
+# Do not unquote + into ' ' in URLs
+# cherry-picked from upstream
+Patch3:         git-1.7.2.1-730220de.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 BuildRequires:  desktop-file-utils
@@ -227,6 +230,7 @@ Requires:       emacs-git = %{version}-%{release}
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1
+%patch3 -p1
 
 # Use these same options for every invocation of 'make'.
 # Otherwise it will rebuild in %%install due to flags changes.
@@ -454,6 +458,9 @@ rm -rf %{buildroot}
 # No files for you!
 
 %changelog
+* Fri Jul 30 2010 Thomas Spura <tomspur at fedoraproject.org> - 1.7.2.1-2
+- cherry-pick: "Do not unquote + into ' ' in URLs"
+
 * Thu Jul 29 2010 Todd Zullinger <tmz at pobox.com> - 1.7.2.1-1
 - Update to git-1.7.2.1
 


More information about the scm-commits mailing list