summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Spura <tomspur@fedoraproject.org>2010-07-30 22:52:13 +0200
committerThomas Spura <tomspur@fedoraproject.org>2010-07-30 22:52:13 +0200
commit383e396ac5599f312be817126ef2e195939338ca (patch)
tree465994e52507e06c5a69aa18f37439054c1094bf
parent4764d30f286c50e99c7b13afa7488fee5d9a0287 (diff)
downloadgit-package-383e396ac5599f312be817126ef2e195939338ca.tar.gz
git-package-383e396ac5599f312be817126ef2e195939338ca.tar.xz
git-package-383e396ac5599f312be817126ef2e195939338ca.zip
cherry-pick: "Do not unquote + into ' ' in URLs"
There are problems with this bug in dist-git.
-rw-r--r--git-1.7.2.1-730220de.patch86
-rw-r--r--git.spec9
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@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@mecheye.net>
+ Signed-off-by: Thomas Rast <trast@student.ethz.ch>
+ Signed-off-by: Junio C Hamano <gitster@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@fedoraproject.org> - 1.7.2.1-2
+- cherry-pick: "Do not unquote + into ' ' in URLs"
+
* Thu Jul 29 2010 Todd Zullinger <tmz@pobox.com> - 1.7.2.1-1
- Update to git-1.7.2.1