git » go-net » commit 324491d

http2: fix bug where '*' as a valid :path value in Transport

author Brad Fitzpatrick
2016-09-12 01:05:40 UTC
committer Brad Fitzpatrick
2016-09-12 18:27:42 UTC
parent cfe3c2a7525b50c3d707256e371c90938cfef98a

http2: fix bug where '*' as a valid :path value in Transport

In the most recent commit (git 3a1f9e, CL 27632) I introduced a bug
where I improperly started rejecting an outgoing :path of '*'.  That
CL was never vendored into std. Once I tried to vendor it and run the
tests, the tests failed due to this regression.

So, fix the bug and allow '*' (e.g. for OPTIONS requests). No test
updates because the tests are already in std, and now pass (again).

Change-Id: Ibb91a17145d381da0fd0ea193e8a1bd59f03c3fa
Reviewed-on: https://go-review.googlesource.com/29070
Reviewed-by: Chris Broadfoot <cbro@golang.org>

http2/http2.go +6 -3

diff --git a/http2/http2.go b/http2/http2.go
index 401923b..ab43a09 100644
--- a/http2/http2.go
+++ b/http2/http2.go
@@ -352,11 +352,14 @@ func (s *sorter) SortStrings(ss []string) {
 }
 
 // validPseudoPath reports whether v is a valid :path pseudo-header
-// value. It must be a non-empty string starting with '/', and not
-// start with two slashes.
+// value. It must be either:
+//
+//     *) a non-empty string starting with '/', but not with with "//",
+//     *) the string '*', for OPTIONS requests.
+//
 // For now this is only used a quick check for deciding when to clean
 // up Opaque URLs before sending requests from the Transport.
 // See golang.org/issue/16847
 func validPseudoPath(v string) bool {
-	return len(v) > 0 && v[0] == '/' && (len(v) == 1 || v[1] != '/')
+	return (len(v) > 0 && v[0] == '/' && (len(v) == 1 || v[1] != '/')) || v == "*"
 }