Compare commits
128 Commits
golang-1.5
...
master
Author | SHA1 | Date |
---|---|---|
Jakub Čajka | 27a8ad3859 | |
Jakub Čajka | c88a8dfff5 | |
Jakub Čajka | 61730a32f4 | |
Jakub Čajka | d7ab797463 | |
Jakub Čajka | fb39d90765 | |
Jakub Čajka | d3aa981e83 | |
Jakub Čajka | dac586c9c7 | |
Fedora Release Engineering | e8c1f5c4a2 | |
Jakub Čajka | 132cf34fe6 | |
Jakub Čajka | a3e201c572 | |
Jakub Čajka | 6db1c7a908 | |
Alejandro Sáez | 0cb15e561e | |
Jakub Čajka | 91d21a3bde | |
Jakub Čajka | ea99ebaff6 | |
Alejandro Sáez | ecf8f72447 | |
Jakub Čajka | fde02715d5 | |
Álex Sáez | 8716ef4de3 | |
Jakub Čajka | aa89c2b0f2 | |
Neal Gompa | 1f08860197 | |
Jakub Čajka | 4487a1b142 | |
Jakub Čajka | 9f5b8dce35 | |
Fedora Release Engineering | 4751ecad2f | |
Jakub Čajka | fd2a3fb06e | |
Jakub Čajka | fbfc80f071 | |
Jakub Čajka | 1524937377 | |
Neal Gompa | a522b09638 | |
Neal Gompa | 50defcc683 | |
Jakub Čajka | f445d76353 | |
Jakub Čajka | 069e0f1f5f | |
Jakub Čajka | 151fe9ed9a | |
Jakub Čajka | 25a05dd355 | |
Jakub Čajka | 8f7b389463 | |
Jakub Čajka | e45411af09 | |
Jakub Čajka | af8d391cb2 | |
Jakub Čajka | 081d5ff6f2 | |
Jakub Čajka | 0e633c63ed | |
Fedora Release Engineering | 140a7e1b44 | |
Jakub Čajka | 29d5602b19 | |
Jakub Čajka | f80e5ff991 | |
Jakub Čajka | a94ffe83e5 | |
Jakub Čajka | 6c0cf70db5 | |
Jakub Čajka | a562f38c65 | |
Jakub Čajka | f344d3da25 | |
Jakub Čajka | 9985c0a473 | |
Jakub Čajka | ef14b33215 | |
Tim Landscheidt | ff7ebd7613 | |
Jakub Čajka | c74b6b6cb8 | |
Jakub Čajka | 73766cf515 | |
Fedora Release Engineering | e3e1bdbf46 | |
Jakub Čajka | 8ae8c86871 | |
Jakub Čajka | bc69b83b00 | |
Jakub Čajka | 50b7643bf7 | |
Jakub Čajka | b86284b4f3 | |
Jakub Čajka | eb7ec5ddc1 | |
Jakub Čajka | 3014b94569 | |
Jakub Čajka | f1f6f5d515 | |
Jakub Čajka | a273a5236a | |
Jakub Čajka | c45c363337 | |
Jakub Čajka | 4043bb182d | |
Jakub Čajka | 62f2ae0511 | |
Jakub Čajka | 75f7f03cb6 | |
Fedora Release Engineering | 72a9f2e921 | |
Jakub Čajka | 19d1adeab4 | |
Jakub Čajka | c333e76e86 | |
Jakub Čajka | 6caa43c106 | |
Jakub Čajka | 66a92c4de7 | |
Jakub Čajka | 2389428bde | |
Jakub Čajka | e8abe4385f | |
Jakub Čajka | 639f9ab37f | |
Jakub Čajka | 5f45ed12c2 | |
Fedora Release Engineering | 13bb238b09 | |
Jakub Čajka | 63e3cb4201 | |
Jakub Čajka | 77baa559ba | |
Jakub Čajka | d37b3b5006 | |
Jakub Čajka | 4bc73c764a | |
Jakub Čajka | b65272222a | |
Jakub Čajka | 315b776905 | |
Jakub Čajka | 920ea39083 | |
Jakub Čajka | 387b897724 | |
Jakub Čajka | ceb83a748c | |
Jakub Čajka | 903219bc93 | |
Fedora Release Engineering | cb0891bb70 | |
Fedora Release Engineering | 494a6d19c3 | |
Jakub Čajka | 9941f71a57 | |
Jakub Čajka | c2d0ceffa4 | |
Jakub Čajka | 3cc854f423 | |
Petr Písař | c7375398e7 | |
Jakub Čajka | 5767354120 | |
Jakub Čajka | 45041c89fe | |
Jakub Čajka | 0a43a1cbaf | |
Jakub Čajka | 1344685ff3 | |
Jakub Čajka | 5706a3480e | |
Jakub Čajka | ab6ee497cb | |
Jakub Čajka | 29646808b3 | |
Vincent Batts | d83d5139a6 | |
Vincent Batts | 63fbc71112 | |
Jakub Čajka | 749ec62908 | |
Jakub Čajka | a1ca3c96e0 | |
Jakub Čajka | 1bf7308023 | |
Fedora Release Engineering | 7dabca5bf2 | |
Jakub Čajka | b881112930 | |
Jakub Čajka | 100fcef237 | |
Jakub Cajka | 0dbd49fdd7 | |
Jakub Čajka | 66c8bd8593 | |
Tom Callaway | 85dfe17917 | |
Jakub Čajka | 663103c2f1 | |
Jakub Čajka | d978616527 | |
Jakub Čajka | 8bda509c5f | |
Jakub Čajka | 1fe9869398 | |
Jakub Čajka | 6896a58aa3 | |
Jakub Čajka | cf2fb88587 | |
Fedora Release Engineering | 00c920284f | |
Jakub Čajka | d36359a723 | |
Jakub Čajka | 04b972ebf4 | |
Jakub Čajka | b2c2028475 | |
Jakub Čajka | 263126ff1b | |
Dennis Gilmore | 30a817d62b | |
Jakub Čajka | f031dfde9c | |
Jakub Čajka | d40cd88359 | |
Jakub Čajka | 672b8a1217 | |
Jakub Čajka | 85525165e1 | |
Jakub Čajka | 8b92652b24 | |
Jakub Čajka | c524af8454 | |
Vincent Batts | ee2b299486 | |
Vincent Batts | c127d6af98 | |
Vincent Batts | a68f1b0499 | |
Vincent Batts | 286f73c812 | |
Vincent Batts | 34fd651dfb |
|
@ -24,3 +24,74 @@
|
|||
/go1.5rc1.src.tar.gz
|
||||
/go1.5.src.tar.gz
|
||||
/go1.5.1.src.tar.gz
|
||||
/go1.5.2.src.tar.gz
|
||||
/Mark.Twain-Tom.Sawyer.txt.bz2
|
||||
/go1.5.3.src.tar.gz
|
||||
/go1.6rc1.src.tar.gz
|
||||
/go1.6.src.tar.gz
|
||||
/go1.6.1.src.tar.gz
|
||||
/go1.6.2.src.tar.gz
|
||||
/go1.7rc2.src.tar.gz
|
||||
/go1.7rc5.src.tar.gz
|
||||
/go1.7.src.tar.gz
|
||||
/go1.7.1.src.tar.gz
|
||||
/go1.7.3.src.tar.gz
|
||||
/go1.7.4.src.tar.gz
|
||||
/go1.8rc3.src.tar.gz
|
||||
/go1.8.src.tar.gz
|
||||
/go1.8.1.src.tar.gz
|
||||
/go1.8.3.src.tar.gz
|
||||
/go1.9beta2.src.tar.gz
|
||||
/go1.9.src.tar.gz
|
||||
/go1.9.1.src.tar.gz
|
||||
/go1.9.2.src.tar.gz
|
||||
/go1.10beta1.src.tar.gz
|
||||
/go1.10beta2.src.tar.gz
|
||||
/go1.10rc1.src.tar.gz
|
||||
/go1.10rc2.src.tar.gz
|
||||
/go1.10.src.tar.gz
|
||||
/go1.10.1.src.tar.gz
|
||||
/go1.10.2.src.tar.gz
|
||||
/go1.10.3.src.tar.gz
|
||||
/go1.11beta1.src.tar.gz
|
||||
/go1.11beta2.src.tar.gz
|
||||
/go1.11beta3.src.tar.gz
|
||||
/go1.11rc1.src.tar.gz
|
||||
/go1.11rc2.src.tar.gz
|
||||
/go1.11.src.tar.gz
|
||||
/go1.11.1.src.tar.gz
|
||||
/go1.11.2.src.tar.gz
|
||||
/go1.11.4.src.tar.gz
|
||||
/go1.12beta2.src.tar.gz
|
||||
/go1.12rc1.src.tar.gz
|
||||
/go1.12.src.tar.gz
|
||||
/go1.12.1.src.tar.gz
|
||||
/go1.12.2.src.tar.gz
|
||||
/go1.12.5.src.tar.gz
|
||||
/go1.12.6.src.tar.gz
|
||||
/go1.12.7.src.tar.gz
|
||||
/go1.13beta1.src.tar.gz
|
||||
/go1.13rc1.src.tar.gz
|
||||
/go1.13rc2.src.tar.gz
|
||||
/go1.13.src.tar.gz
|
||||
/go1.13.1.src.tar.gz
|
||||
/go1.13.3.src.tar.gz
|
||||
/go1.13.4.src.tar.gz
|
||||
/go1.13.5.src.tar.gz
|
||||
/go1.13.6.src.tar.gz
|
||||
/go1.14beta1.src.tar.gz
|
||||
/go1.14rc1.src.tar.gz
|
||||
/go1.14.src.tar.gz
|
||||
/go1.14.2.src.tar.gz
|
||||
/go1.14.3.src.tar.gz
|
||||
/go1.14.4.src.tar.gz
|
||||
/go1.14.6.src.tar.gz
|
||||
/go1.15beta1.src.tar.gz
|
||||
/go1.15rc1.src.tar.gz
|
||||
/go1.15rc2.src.tar.gz
|
||||
/go1.15.src.tar.gz
|
||||
/go1.15.1.src.tar.gz
|
||||
/go1.15.2.src.tar.gz
|
||||
/go1.15.3.src.tar.gz
|
||||
/go1.15.4.src.tar.gz
|
||||
/go1.15.5.src.tar.gz
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
From edce31a2904846ae74e3c011f2cf5fddc963459e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jakub=20=C4=8Cajka?= <jcajka@redhat.com>
|
||||
Date: Thu, 22 Mar 2018 12:07:32 +0100
|
||||
Subject: [PATCH 1/3] Don't use the bundled tzdata at runtime, except for the
|
||||
internal test suite
|
||||
|
||||
---
|
||||
src/time/internal_test.go | 7 +++++--
|
||||
src/time/zoneinfo_test.go | 3 ++-
|
||||
src/time/zoneinfo_unix.go | 2 --
|
||||
3 files changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/time/internal_test.go b/src/time/internal_test.go
|
||||
index 76d5524124..e81ace5f64 100644
|
||||
--- a/src/time/internal_test.go
|
||||
+++ b/src/time/internal_test.go
|
||||
@@ -4,13 +4,15 @@
|
||||
|
||||
package time
|
||||
|
||||
+import "runtime"
|
||||
+
|
||||
func init() {
|
||||
// force US/Pacific for time zone tests
|
||||
ForceUSPacificForTesting()
|
||||
}
|
||||
|
||||
func initTestingZone() {
|
||||
- z, err := loadLocation("America/Los_Angeles", zoneSources[len(zoneSources)-1:])
|
||||
+ z, err := loadLocation("America/Los_Angeles", zoneSources)
|
||||
if err != nil {
|
||||
panic("cannot load America/Los_Angeles for testing: " + err.Error())
|
||||
}
|
||||
@@ -21,8 +23,9 @@ func initTestingZone() {
|
||||
var OrigZoneSources = zoneSources
|
||||
|
||||
func forceZipFileForTesting(zipOnly bool) {
|
||||
- zoneSources = make([]string, len(OrigZoneSources))
|
||||
+ zoneSources = make([]string, len(OrigZoneSources)+1)
|
||||
copy(zoneSources, OrigZoneSources)
|
||||
+ zoneSources = append(zoneSources, runtime.GOROOT()+"/lib/time/zoneinfo.zip")
|
||||
if zipOnly {
|
||||
zoneSources = zoneSources[len(zoneSources)-1:]
|
||||
}
|
||||
diff --git a/src/time/zoneinfo_test.go b/src/time/zoneinfo_test.go
|
||||
index 7a55d4f618..6063ca1195 100644
|
||||
--- a/src/time/zoneinfo_test.go
|
||||
+++ b/src/time/zoneinfo_test.go
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"reflect"
|
||||
+ "runtime"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
@@ -128,7 +129,7 @@ func TestLoadLocationFromTZData(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
- tzinfo, err := time.LoadTzinfo(locationName, time.OrigZoneSources[len(time.OrigZoneSources)-1])
|
||||
+ tzinfo, err := time.LoadTzinfo(locationName, runtime.GOROOT()+"/lib/time/zoneinfo.zip")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
diff --git a/src/time/zoneinfo_unix.go b/src/time/zoneinfo_unix.go
|
||||
index 88313aa0ed..d9596115ef 100644
|
||||
--- a/src/time/zoneinfo_unix.go
|
||||
+++ b/src/time/zoneinfo_unix.go
|
||||
@@ -12,7 +12,6 @@
|
||||
package time
|
||||
|
||||
import (
|
||||
- "runtime"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
@@ -22,7 +21,6 @@ var zoneSources = []string{
|
||||
"/usr/share/zoneinfo/",
|
||||
"/usr/share/lib/zoneinfo/",
|
||||
"/usr/lib/locale/TZ/",
|
||||
- runtime.GOROOT() + "/lib/time/zoneinfo.zip",
|
||||
}
|
||||
|
||||
func initLocal() {
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
From 817407fc2d6a861e65086388766f58082d38bc0b Mon Sep 17 00:00:00 2001
|
||||
From: Michael Munday <munday@ca.ibm.com>
|
||||
Date: Tue, 17 Jan 2017 11:33:38 -0500
|
||||
Subject: [PATCH 2/3] syscall: expose IfInfomsg.X__ifi_pad on s390x
|
||||
|
||||
Exposing this field on s390x improves compatibility with the other
|
||||
linux architectures, all of which already expose it.
|
||||
|
||||
Fixes #18628 and updates #18632.
|
||||
|
||||
Change-Id: I08e8e1eb705f898cd8822f8bee0d61ce11d514b5
|
||||
---
|
||||
src/syscall/ztypes_linux_s390x.go | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/syscall/ztypes_linux_s390x.go b/src/syscall/ztypes_linux_s390x.go
|
||||
index 63c4a83b19..b5894255df 100644
|
||||
--- a/src/syscall/ztypes_linux_s390x.go
|
||||
+++ b/src/syscall/ztypes_linux_s390x.go
|
||||
@@ -449,12 +449,12 @@ type RtAttr struct {
|
||||
}
|
||||
|
||||
type IfInfomsg struct {
|
||||
- Family uint8
|
||||
- _ uint8
|
||||
- Type uint16
|
||||
- Index int32
|
||||
- Flags uint32
|
||||
- Change uint32
|
||||
+ Family uint8
|
||||
+ X__ifi_pad uint8
|
||||
+ Type uint16
|
||||
+ Index int32
|
||||
+ Flags uint32
|
||||
+ Change uint32
|
||||
}
|
||||
|
||||
type IfAddrmsg struct {
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
From b38cd2374c2395f5a77802ef8ea3d7ac5b8a86ad Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jakub=20=C4=8Cajka?= <jcajka@redhat.com>
|
||||
Date: Mon, 27 May 2019 15:12:53 +0200
|
||||
Subject: [PATCH 3/3] cmd/go: disable Google's proxy and sumdb
|
||||
|
||||
---
|
||||
src/cmd/go/internal/cfg/cfg.go | 10 +++++-----
|
||||
src/cmd/go/testdata/script/mod_sumdb_golang.txt | 6 +++---
|
||||
2 files changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/cmd/go/internal/cfg/cfg.go b/src/cmd/go/internal/cfg/cfg.go
|
||||
index 61dc6bdda6..e8658dc56c 100644
|
||||
--- a/src/cmd/go/internal/cfg/cfg.go
|
||||
+++ b/src/cmd/go/internal/cfg/cfg.go
|
||||
@@ -245,11 +245,11 @@ var (
|
||||
GOPPC64 = envOr("GOPPC64", fmt.Sprintf("%s%d", "power", objabi.GOPPC64))
|
||||
GOWASM = envOr("GOWASM", fmt.Sprint(objabi.GOWASM))
|
||||
|
||||
- GOPROXY = envOr("GOPROXY", "https://proxy.golang.org,direct")
|
||||
- GOSUMDB = envOr("GOSUMDB", "sum.golang.org")
|
||||
- GOPRIVATE = Getenv("GOPRIVATE")
|
||||
- GONOPROXY = envOr("GONOPROXY", GOPRIVATE)
|
||||
- GONOSUMDB = envOr("GONOSUMDB", GOPRIVATE)
|
||||
+ GOPROXY = envOr("GOPROXY", "direct")
|
||||
+ GOSUMDB = envOr("GOSUMDB", "off")
|
||||
+ GOPRIVATE = Getenv("GOPRIVATE")
|
||||
+ GONOPROXY = envOr("GONOPROXY", GOPRIVATE)
|
||||
+ GONOSUMDB = envOr("GONOSUMDB", GOPRIVATE)
|
||||
GOINSECURE = Getenv("GOINSECURE")
|
||||
)
|
||||
|
||||
diff --git a/src/cmd/go/testdata/script/mod_sumdb_golang.txt b/src/cmd/go/testdata/script/mod_sumdb_golang.txt
|
||||
index 40a07fc7e9..50436e32d7 100644
|
||||
--- a/src/cmd/go/testdata/script/mod_sumdb_golang.txt
|
||||
+++ b/src/cmd/go/testdata/script/mod_sumdb_golang.txt
|
||||
@@ -2,12 +2,12 @@
|
||||
env GOPROXY=
|
||||
env GOSUMDB=
|
||||
go env GOPROXY
|
||||
-stdout '^https://proxy.golang.org,direct$'
|
||||
+stdout '^direct$'
|
||||
go env GOSUMDB
|
||||
-stdout '^sum.golang.org$'
|
||||
+stdout '^off$'
|
||||
env GOPROXY=https://proxy.golang.org
|
||||
go env GOSUMDB
|
||||
-stdout '^sum.golang.org$'
|
||||
+stdout '^off$'
|
||||
|
||||
# download direct from github
|
||||
[!net] skip
|
||||
--
|
||||
2.21.0
|
||||
|
|
@ -1,135 +0,0 @@
|
|||
commit 117ddcb83d7f42d6aa72241240af99ded81118e9
|
||||
Author: Brad Fitzpatrick <bradfitz@golang.org>
|
||||
Date: Tue Jun 30 09:22:41 2015 -0700
|
||||
|
||||
net/textproto: don't treat spaces as hyphens in header keys
|
||||
|
||||
This was originally done in https://codereview.appspot.com/5690059
|
||||
(Feb 2012) to deal with bad response headers coming back from webcams,
|
||||
but it presents a potential security problem with HTTP request
|
||||
smuggling for request headers containing "Content Length" instead of
|
||||
"Content-Length".
|
||||
|
||||
Part of overall HTTP hardening for request smuggling. See RFC 7230.
|
||||
|
||||
Thanks to Régis Leroy for the report.
|
||||
|
||||
Change-Id: I92b17fb637c9171c5774ea1437979ae2c17ca88a
|
||||
Reviewed-on: https://go-review.googlesource.com/11772
|
||||
Reviewed-by: Russ Cox <rsc@golang.org>
|
||||
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
|
||||
TryBot-Result: Gobot Gobot <gobot@golang.org>
|
||||
|
||||
diff --git a/src/net/http/header.go b/src/net/http/header.go
|
||||
index 153b943..d847b13 100644
|
||||
--- a/src/net/http/header.go
|
||||
+++ b/src/net/http/header.go
|
||||
@@ -168,6 +168,8 @@ func (h Header) WriteSubset(w io.Writer, exclude map[string]bool) error {
|
||||
// letter and any letter following a hyphen to upper case;
|
||||
// the rest are converted to lowercase. For example, the
|
||||
// canonical key for "accept-encoding" is "Accept-Encoding".
|
||||
+// If s contains a space or invalid header field bytes, it is
|
||||
+// returned without modifications.
|
||||
func CanonicalHeaderKey(s string) string { return textproto.CanonicalMIMEHeaderKey(s) }
|
||||
|
||||
// hasToken reports whether token appears with v, ASCII
|
||||
diff --git a/src/net/textproto/reader.go b/src/net/textproto/reader.go
|
||||
index e4b8f6b..91303fe 100644
|
||||
--- a/src/net/textproto/reader.go
|
||||
+++ b/src/net/textproto/reader.go
|
||||
@@ -547,11 +547,16 @@ func (r *Reader) upcomingHeaderNewlines() (n int) {
|
||||
// the rest are converted to lowercase. For example, the
|
||||
// canonical key for "accept-encoding" is "Accept-Encoding".
|
||||
// MIME header keys are assumed to be ASCII only.
|
||||
+// If s contains a space or invalid header field bytes, it is
|
||||
+// returned without modifications.
|
||||
func CanonicalMIMEHeaderKey(s string) string {
|
||||
// Quick check for canonical encoding.
|
||||
upper := true
|
||||
for i := 0; i < len(s); i++ {
|
||||
c := s[i]
|
||||
+ if !validHeaderFieldByte(c) {
|
||||
+ return s
|
||||
+ }
|
||||
if upper && 'a' <= c && c <= 'z' {
|
||||
return canonicalMIMEHeaderKey([]byte(s))
|
||||
}
|
||||
@@ -565,19 +570,44 @@ func CanonicalMIMEHeaderKey(s string) string {
|
||||
|
||||
const toLower = 'a' - 'A'
|
||||
|
||||
+// validHeaderFieldByte reports whether b is a valid byte in a header
|
||||
+// field key. This is actually stricter than RFC 7230, which says:
|
||||
+// tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." /
|
||||
+// "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA
|
||||
+// token = 1*tchar
|
||||
+// TODO: revisit in Go 1.6+ and possibly expand this. But note that many
|
||||
+// servers have historically dropped '_' to prevent ambiguities when mapping
|
||||
+// to CGI environment variables.
|
||||
+func validHeaderFieldByte(b byte) bool {
|
||||
+ return ('A' <= b && b <= 'Z') ||
|
||||
+ ('a' <= b && b <= 'z') ||
|
||||
+ ('0' <= b && b <= '9') ||
|
||||
+ b == '-'
|
||||
+}
|
||||
+
|
||||
// canonicalMIMEHeaderKey is like CanonicalMIMEHeaderKey but is
|
||||
// allowed to mutate the provided byte slice before returning the
|
||||
// string.
|
||||
+//
|
||||
+// For invalid inputs (if a contains spaces or non-token bytes), a
|
||||
+// is unchanged and a string copy is returned.
|
||||
func canonicalMIMEHeaderKey(a []byte) string {
|
||||
+ // See if a looks like a header key. If not, return it unchanged.
|
||||
+ for _, c := range a {
|
||||
+ if validHeaderFieldByte(c) {
|
||||
+ continue
|
||||
+ }
|
||||
+ // Don't canonicalize.
|
||||
+ return string(a)
|
||||
+ }
|
||||
+
|
||||
upper := true
|
||||
for i, c := range a {
|
||||
// Canonicalize: first letter upper case
|
||||
// and upper case after each dash.
|
||||
// (Host, User-Agent, If-Modified-Since).
|
||||
// MIME headers are ASCII only, so no Unicode issues.
|
||||
- if c == ' ' {
|
||||
- c = '-'
|
||||
- } else if upper && 'a' <= c && c <= 'z' {
|
||||
+ if upper && 'a' <= c && c <= 'z' {
|
||||
c -= toLower
|
||||
} else if !upper && 'A' <= c && c <= 'Z' {
|
||||
c += toLower
|
||||
diff --git a/src/net/textproto/reader_test.go b/src/net/textproto/reader_test.go
|
||||
index 6bbd993..8fce7dd 100644
|
||||
--- a/src/net/textproto/reader_test.go
|
||||
+++ b/src/net/textproto/reader_test.go
|
||||
@@ -24,11 +24,14 @@ var canonicalHeaderKeyTests = []canonicalHeaderKeyTest{
|
||||
{"uSER-aGENT", "User-Agent"},
|
||||
{"user-agent", "User-Agent"},
|
||||
{"USER-AGENT", "User-Agent"},
|
||||
- {"üser-agenT", "üser-Agent"}, // non-ASCII unchanged
|
||||
+
|
||||
+ // Non-ASCII or anything with spaces or non-token chars is unchanged:
|
||||
+ {"üser-agenT", "üser-agenT"},
|
||||
+ {"a B", "a B"},
|
||||
|
||||
// This caused a panic due to mishandling of a space:
|
||||
- {"C Ontent-Transfer-Encoding", "C-Ontent-Transfer-Encoding"},
|
||||
- {"foo bar", "Foo-Bar"},
|
||||
+ {"C Ontent-Transfer-Encoding", "C Ontent-Transfer-Encoding"},
|
||||
+ {"foo bar", "foo bar"},
|
||||
}
|
||||
|
||||
func TestCanonicalMIMEHeaderKey(t *testing.T) {
|
||||
@@ -194,7 +197,7 @@ func TestReadMIMEHeaderNonCompliant(t *testing.T) {
|
||||
"Foo": {"bar"},
|
||||
"Content-Language": {"en"},
|
||||
"Sid": {"0"},
|
||||
- "Audio-Mode": {"None"},
|
||||
+ "Audio Mode": {"None"},
|
||||
"Privilege": {"127"},
|
||||
}
|
||||
if !reflect.DeepEqual(m, want) || err != nil {
|
|
@ -1,112 +0,0 @@
|
|||
commit 143822585e32449860e624cace9d2e521deee62e
|
||||
Author: Brad Fitzpatrick <bradfitz@golang.org>
|
||||
Date: Tue Jul 7 13:19:44 2015 -0600
|
||||
|
||||
net/http: revert overly-strict part of earlier smuggling defense
|
||||
|
||||
The recent https://golang.org/cl/11810 is reportedly a bit too
|
||||
aggressive.
|
||||
|
||||
Apparently some HTTP requests in the wild do contain both a
|
||||
Transfer-Encoding along with a bogus Content-Length. Instead of
|
||||
returning a 400 Bad Request error, we should just ignore the
|
||||
Content-Length like we did before.
|
||||
|
||||
Change-Id: I0001be90d09f8293a34f04691f608342875ff5c4
|
||||
Reviewed-on: https://go-review.googlesource.com/11962
|
||||
Reviewed-by: Andrew Gerrand <adg@golang.org>
|
||||
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
|
||||
TryBot-Result: Gobot Gobot <gobot@golang.org>
|
||||
|
||||
diff --git a/src/net/http/readrequest_test.go b/src/net/http/readrequest_test.go
|
||||
index 1a3cf91..60e2be4 100644
|
||||
--- a/src/net/http/readrequest_test.go
|
||||
+++ b/src/net/http/readrequest_test.go
|
||||
@@ -178,6 +178,36 @@ var reqTests = []reqTest{
|
||||
noError,
|
||||
},
|
||||
|
||||
+ // Tests chunked body and a bogus Content-Length which should be deleted.
|
||||
+ {
|
||||
+ "POST / HTTP/1.1\r\n" +
|
||||
+ "Host: foo.com\r\n" +
|
||||
+ "Transfer-Encoding: chunked\r\n" +
|
||||
+ "Content-Length: 9999\r\n\r\n" + // to be removed.
|
||||
+ "3\r\nfoo\r\n" +
|
||||
+ "3\r\nbar\r\n" +
|
||||
+ "0\r\n" +
|
||||
+ "\r\n",
|
||||
+ &Request{
|
||||
+ Method: "POST",
|
||||
+ URL: &url.URL{
|
||||
+ Path: "/",
|
||||
+ },
|
||||
+ TransferEncoding: []string{"chunked"},
|
||||
+ Proto: "HTTP/1.1",
|
||||
+ ProtoMajor: 1,
|
||||
+ ProtoMinor: 1,
|
||||
+ Header: Header{},
|
||||
+ ContentLength: -1,
|
||||
+ Host: "foo.com",
|
||||
+ RequestURI: "/",
|
||||
+ },
|
||||
+
|
||||
+ "foobar",
|
||||
+ noTrailer,
|
||||
+ noError,
|
||||
+ },
|
||||
+
|
||||
// CONNECT request with domain name:
|
||||
{
|
||||
"CONNECT www.google.com:443 HTTP/1.1\r\n\r\n",
|
||||
@@ -400,11 +430,6 @@ Content-Length: 3
|
||||
Content-Length: 4
|
||||
|
||||
abc`)},
|
||||
- {"smuggle_chunked_and_len", reqBytes(`POST / HTTP/1.1
|
||||
-Transfer-Encoding: chunked
|
||||
-Content-Length: 3
|
||||
-
|
||||
-abc`)},
|
||||
{"smuggle_content_len_head", reqBytes(`HEAD / HTTP/1.1
|
||||
Host: foo
|
||||
Content-Length: 5`)},
|
||||
diff --git a/src/net/http/transfer.go b/src/net/http/transfer.go
|
||||
index 3c868bd..fbbbf24 100644
|
||||
--- a/src/net/http/transfer.go
|
||||
+++ b/src/net/http/transfer.go
|
||||
@@ -430,7 +430,6 @@ func fixTransferEncoding(isResponse bool, requestMethod string, header Header) (
|
||||
if !present {
|
||||
return nil, nil
|
||||
}
|
||||
- isRequest := !isResponse
|
||||
delete(header, "Transfer-Encoding")
|
||||
|
||||
encodings := strings.Split(raw[0], ",")
|
||||
@@ -458,12 +457,20 @@ func fixTransferEncoding(isResponse bool, requestMethod string, header Header) (
|
||||
// RFC 7230 3.3.2 says "A sender MUST NOT send a
|
||||
// Content-Length header field in any message that
|
||||
// contains a Transfer-Encoding header field."
|
||||
- if len(header["Content-Length"]) > 0 {
|
||||
- if isRequest {
|
||||
- return nil, errors.New("http: invalid Content-Length with Transfer-Encoding")
|
||||
- }
|
||||
- delete(header, "Content-Length")
|
||||
- }
|
||||
+ //
|
||||
+ // but also:
|
||||
+ // "If a message is received with both a
|
||||
+ // Transfer-Encoding and a Content-Length header
|
||||
+ // field, the Transfer-Encoding overrides the
|
||||
+ // Content-Length. Such a message might indicate an
|
||||
+ // attempt to perform request smuggling (Section 9.5)
|
||||
+ // or response splitting (Section 9.4) and ought to be
|
||||
+ // handled as an error. A sender MUST remove the
|
||||
+ // received Content-Length field prior to forwarding
|
||||
+ // such a message downstream."
|
||||
+ //
|
||||
+ // Reportedly, these appear in the wild.
|
||||
+ delete(header, "Content-Length")
|
||||
return te, nil
|
||||
}
|
||||
|
|
@ -1,225 +0,0 @@
|
|||
commit 300d9a21583e7cf0149a778a0611e76ff7c6680f
|
||||
Author: Brad Fitzpatrick <bradfitz@golang.org>
|
||||
Date: Tue Jun 30 14:21:15 2015 -0700
|
||||
|
||||
net/http: harden Server against request smuggling
|
||||
|
||||
See RFC 7230.
|
||||
|
||||
Thanks to Régis Leroy for the report.
|
||||
|
||||
Change-Id: Ic1779bc2180900430d4d7a4938cac04ed73c304c
|
||||
Reviewed-on: https://go-review.googlesource.com/11810
|
||||
Reviewed-by: Russ Cox <rsc@golang.org>
|
||||
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
|
||||
|
||||
diff --git a/src/net/http/readrequest_test.go b/src/net/http/readrequest_test.go
|
||||
index e930d99..1a3cf91 100644
|
||||
--- a/src/net/http/readrequest_test.go
|
||||
+++ b/src/net/http/readrequest_test.go
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
+ "io/ioutil"
|
||||
"net/url"
|
||||
"reflect"
|
||||
"strings"
|
||||
@@ -323,6 +324,32 @@ var reqTests = []reqTest{
|
||||
noTrailer,
|
||||
noError,
|
||||
},
|
||||
+
|
||||
+ // HEAD with Content-Length 0. Make sure this is permitted,
|
||||
+ // since I think we used to send it.
|
||||
+ {
|
||||
+ "HEAD / HTTP/1.1\r\nHost: issue8261.com\r\nConnection: close\r\nContent-Length: 0\r\n\r\n",
|
||||
+ &Request{
|
||||
+ Method: "HEAD",
|
||||
+ URL: &url.URL{
|
||||
+ Path: "/",
|
||||
+ },
|
||||
+ Header: Header{
|
||||
+ "Connection": []string{"close"},
|
||||
+ "Content-Length": []string{"0"},
|
||||
+ },
|
||||
+ Host: "issue8261.com",
|
||||
+ Proto: "HTTP/1.1",
|
||||
+ ProtoMajor: 1,
|
||||
+ ProtoMinor: 1,
|
||||
+ Close: true,
|
||||
+ RequestURI: "/",
|
||||
+ },
|
||||
+
|
||||
+ noBody,
|
||||
+ noTrailer,
|
||||
+ noError,
|
||||
+ },
|
||||
}
|
||||
|
||||
func TestReadRequest(t *testing.T) {
|
||||
@@ -356,3 +383,39 @@ func TestReadRequest(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
+
|
||||
+// reqBytes treats req as a request (with \n delimiters) and returns it with \r\n delimiters,
|
||||
+// ending in \r\n\r\n
|
||||
+func reqBytes(req string) []byte {
|
||||
+ return []byte(strings.Replace(strings.TrimSpace(req), "\n", "\r\n", -1) + "\r\n\r\n")
|
||||
+}
|
||||
+
|
||||
+var badRequestTests = []struct {
|
||||
+ name string
|
||||
+ req []byte
|
||||
+}{
|
||||
+ {"bad_connect_host", reqBytes("CONNECT []%20%48%54%54%50%2f%31%2e%31%0a%4d%79%48%65%61%64%65%72%3a%20%31%32%33%0a%0a HTTP/1.0")},
|
||||
+ {"smuggle_two_contentlen", reqBytes(`POST / HTTP/1.1
|
||||
+Content-Length: 3
|
||||
+Content-Length: 4
|
||||
+
|
||||
+abc`)},
|
||||
+ {"smuggle_chunked_and_len", reqBytes(`POST / HTTP/1.1
|
||||
+Transfer-Encoding: chunked
|
||||
+Content-Length: 3
|
||||
+
|
||||
+abc`)},
|
||||
+ {"smuggle_content_len_head", reqBytes(`HEAD / HTTP/1.1
|
||||
+Host: foo
|
||||
+Content-Length: 5`)},
|
||||
+}
|
||||
+
|
||||
+func TestReadRequest_Bad(t *testing.T) {
|
||||
+ for _, tt := range badRequestTests {
|
||||
+ got, err := ReadRequest(bufio.NewReader(bytes.NewReader(tt.req)))
|
||||
+ if err == nil {
|
||||
+ all, err := ioutil.ReadAll(got.Body)
|
||||
+ t.Errorf("%s: got unexpected request = %#v\n Body = %q, %v", tt.name, got, all, err)
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/net/http/transfer.go b/src/net/http/transfer.go
|
||||
index 5205003..3887604 100644
|
||||
--- a/src/net/http/transfer.go
|
||||
+++ b/src/net/http/transfer.go
|
||||
@@ -143,6 +143,9 @@ func (t *transferWriter) shouldSendContentLength() bool {
|
||||
return true
|
||||
}
|
||||
if t.ContentLength == 0 && isIdentity(t.TransferEncoding) {
|
||||
+ if t.Method == "GET" || t.Method == "HEAD" {
|
||||
+ return false
|
||||
+ }
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -310,6 +313,7 @@ func readTransfer(msg interface{}, r *bufio.Reader) (err error) {
|
||||
}
|
||||
case *Request:
|
||||
t.Header = rr.Header
|
||||
+ t.RequestMethod = rr.Method
|
||||
t.ProtoMajor = rr.ProtoMajor
|
||||
t.ProtoMinor = rr.ProtoMinor
|
||||
// Transfer semantics for Requests are exactly like those for
|
||||
@@ -325,7 +329,7 @@ func readTransfer(msg interface{}, r *bufio.Reader) (err error) {
|
||||
}
|
||||
|
||||
// Transfer encoding, content length
|
||||
- t.TransferEncoding, err = fixTransferEncoding(t.RequestMethod, t.Header)
|
||||
+ t.TransferEncoding, err = fixTransferEncoding(isResponse, t.RequestMethod, t.Header)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -413,12 +417,12 @@ func chunked(te []string) bool { return len(te) > 0 && te[0] == "chunked" }
|
||||
func isIdentity(te []string) bool { return len(te) == 1 && te[0] == "identity" }
|
||||
|
||||
// Sanitize transfer encoding
|
||||
-func fixTransferEncoding(requestMethod string, header Header) ([]string, error) {
|
||||
+func fixTransferEncoding(isResponse bool, requestMethod string, header Header) ([]string, error) {
|
||||
raw, present := header["Transfer-Encoding"]
|
||||
if !present {
|
||||
return nil, nil
|
||||
}
|
||||
-
|
||||
+ isRequest := !isResponse
|
||||
delete(header, "Transfer-Encoding")
|
||||
|
||||
encodings := strings.Split(raw[0], ",")
|
||||
@@ -443,10 +447,15 @@ func fixTransferEncoding(requestMethod string, header Header) ([]string, error)
|
||||
return nil, &badStringError{"too many transfer encodings", strings.Join(te, ",")}
|
||||
}
|
||||
if len(te) > 0 {
|
||||
- // Chunked encoding trumps Content-Length. See RFC 2616
|
||||
- // Section 4.4. Currently len(te) > 0 implies chunked
|
||||
- // encoding.
|
||||
- delete(header, "Content-Length")
|
||||
+ // RFC 7230 3.3.2 says "A sender MUST NOT send a
|
||||
+ // Content-Length header field in any message that
|
||||
+ // contains a Transfer-Encoding header field."
|
||||
+ if len(header["Content-Length"]) > 0 {
|
||||
+ if isRequest {
|
||||
+ return nil, errors.New("http: invalid Content-Length with Transfer-Encoding")
|
||||
+ }
|
||||
+ delete(header, "Content-Length")
|
||||
+ }
|
||||
return te, nil
|
||||
}
|
||||
|
||||
@@ -457,9 +466,17 @@ func fixTransferEncoding(requestMethod string, header Header) ([]string, error)
|
||||
// function is not a method, because ultimately it should be shared by
|
||||
// ReadResponse and ReadRequest.
|
||||
func fixLength(isResponse bool, status int, requestMethod string, header Header, te []string) (int64, error) {
|
||||
-
|
||||
+ contentLens := header["Content-Length"]
|
||||
+ isRequest := !isResponse
|
||||
// Logic based on response type or status
|
||||
if noBodyExpected(requestMethod) {
|
||||
+ // For HTTP requests, as part of hardening against request
|
||||
+ // smuggling (RFC 7230), don't allow a Content-Length header for
|
||||
+ // methods which don't permit bodies. As an exception, allow
|
||||
+ // exactly one Content-Length header if its value is "0".
|
||||
+ if isRequest && len(contentLens) > 0 && !(len(contentLens) == 1 && contentLens[0] == "0") {
|
||||
+ return 0, fmt.Errorf("http: method cannot contain a Content-Length; got %q", contentLens)
|
||||
+ }
|
||||
return 0, nil
|
||||
}
|
||||
if status/100 == 1 {
|
||||
@@ -470,13 +487,21 @@ func fixLength(isResponse bool, status int, requestMethod string, header Header,
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
+ if len(contentLens) > 1 {
|
||||
+ // harden against HTTP request smuggling. See RFC 7230.
|
||||
+ return 0, errors.New("http: message cannot contain multiple Content-Length headers")
|
||||
+ }
|
||||
+
|
||||
// Logic based on Transfer-Encoding
|
||||
if chunked(te) {
|
||||
return -1, nil
|
||||
}
|
||||
|
||||
// Logic based on Content-Length
|
||||
- cl := strings.TrimSpace(header.get("Content-Length"))
|
||||
+ var cl string
|
||||
+ if len(contentLens) == 1 {
|
||||
+ cl = strings.TrimSpace(contentLens[0])
|
||||
+ }
|
||||
if cl != "" {
|
||||
n, err := parseContentLength(cl)
|
||||
if err != nil {
|
||||
@@ -487,11 +512,14 @@ func fixLength(isResponse bool, status int, requestMethod string, header Header,
|
||||
header.Del("Content-Length")
|
||||
}
|
||||
|
||||
- if !isResponse && requestMethod == "GET" {
|
||||
- // RFC 2616 doesn't explicitly permit nor forbid an
|
||||
+ if !isResponse {
|
||||
+ // RFC 2616 neither explicitly permits nor forbids an
|
||||
// entity-body on a GET request so we permit one if
|
||||
// declared, but we default to 0 here (not -1 below)
|
||||
// if there's no mention of a body.
|
||||
+ // Likewise, all other request methods are assumed to have
|
||||
+ // no body if neither Transfer-Encoding chunked nor a
|
||||
+ // Content-Length are set.
|
||||
return 0, nil
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
// +build rpm_crashtraceback
|
||||
|
||||
package runtime
|
||||
|
||||
func init() {
|
||||
setTraceback("crash")
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
diff --git a/src/time/zoneinfo_unix.go b/src/time/zoneinfo_unix.go
|
||||
index ed9502d..c2569e7 100644
|
||||
--- a/src/time/zoneinfo_unix.go
|
||||
+++ b/src/time/zoneinfo_unix.go
|
||||
@@ -32,14 +32,14 @@ var zoneDirs = []string{
|
||||
"/usr/share/zoneinfo/",
|
||||
"/usr/share/lib/zoneinfo/",
|
||||
"/usr/lib/locale/TZ/",
|
||||
- runtime.GOROOT() + "/lib/time/zoneinfo.zip",
|
||||
}
|
||||
|
||||
var origZoneDirs = zoneDirs
|
||||
|
||||
func forceZipFileForTesting(zipOnly bool) {
|
||||
- zoneDirs = make([]string, len(origZoneDirs))
|
||||
+ zoneDirs = make([]string, len(origZoneDirs)+1)
|
||||
copy(zoneDirs, origZoneDirs)
|
||||
+ zoneDirs = append(zoneDirs, runtime.GOROOT()+"/lib/time/zoneinfo.zip")
|
||||
if zipOnly {
|
||||
for i := 0; i < len(zoneDirs)-1; i++ {
|
||||
zoneDirs[i] = "/XXXNOEXIST"
|
|
@ -1,13 +0,0 @@
|
|||
diff --git a/src/runtime/runtime-gdb_test.go b/src/runtime/runtime-gdb_test.go
|
||||
index f4014b2..2c09441 100644
|
||||
--- a/src/runtime/runtime-gdb_test.go
|
||||
+++ b/src/runtime/runtime-gdb_test.go
|
||||
@@ -38,7 +38,7 @@ func main() {
|
||||
}
|
||||
`
|
||||
|
||||
-func TestGdbPython(t *testing.T) {
|
||||
+func testGdbPython(t *testing.T) {
|
||||
if runtime.GOOS == "darwin" {
|
||||
t.Skip("gdb does not work on darwin")
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
diff --git a/src/syscall/exec_linux_test.go b/src/syscall/exec_linux_test.go
|
||||
index 60d2734..b16540f 100644
|
||||
--- a/src/syscall/exec_linux_test.go
|
||||
+++ b/src/syscall/exec_linux_test.go
|
||||
@@ -89,7 +89,7 @@ func kernelVersion(t *testing.T) (int, int) {
|
||||
return major, minor
|
||||
}
|
||||
|
||||
-func TestCloneNEWUSERAndRemapNoRootDisableSetgroups(t *testing.T) {
|
||||
+func testCloneNEWUSERAndRemapNoRootDisableSetgroups(t *testing.T) {
|
||||
if os.Getuid() == 0 {
|
||||
t.Skip("skipping unprivileged user only test")
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,19 +0,0 @@
|
|||
Index: go/src/make.bash
|
||||
===================================================================
|
||||
--- go.orig/src/make.bash
|
||||
+++ go/src/make.bash
|
||||
@@ -153,12 +153,12 @@ if [ "$GOHOSTARCH" != "$GOARCH" -o "$GOHOSTOS" != "$GOOS" ]; then
|
||||
# CC_FOR_TARGET is recorded as the default compiler for the go tool. When building for the host, however,
|
||||
# use the host compiler, CC, from `cmd/dist/dist env` instead.
|
||||
CC=$CC GOOS=$GOHOSTOS GOARCH=$GOHOSTARCH \
|
||||
- "$GOTOOLDIR"/go_bootstrap install -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v std cmd
|
||||
+ "$GOTOOLDIR"/go_bootstrap install -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v -x std cmd
|
||||
echo
|
||||
fi
|
||||
|
||||
echo "##### Building packages and commands for $GOOS/$GOARCH."
|
||||
-CC=$CC_FOR_TARGET "$GOTOOLDIR"/go_bootstrap install $GO_FLAGS -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v std cmd
|
||||
+CC=$CC_FOR_TARGET "$GOTOOLDIR"/go_bootstrap install $GO_FLAGS -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v -x std cmd
|
||||
echo
|
||||
|
||||
rm -f "$GOTOOLDIR"/go_bootstrap
|
|
@ -1,53 +0,0 @@
|
|||
diff --git a/src/cmd/dist/buildtool.go b/src/cmd/dist/buildtool.go
|
||||
index be54ac4..6744fbdc 100644
|
||||
--- a/src/cmd/dist/buildtool.go
|
||||
+++ b/src/cmd/dist/buildtool.go
|
||||
@@ -108,12 +108,20 @@ func bootstrapBuildTools() {
|
||||
os.Setenv("GOBIN", "")
|
||||
|
||||
os.Setenv("GOOS", "")
|
||||
- os.Setenv("GOHOSTOS", "")
|
||||
os.Setenv("GOARCH", "")
|
||||
+
|
||||
+ hostos := os.Getenv("GOHOSTOS")
|
||||
+ hostarch := os.Getenv("GOHOSTARCH")
|
||||
+ os.Setenv("GOHOSTOS", "")
|
||||
os.Setenv("GOHOSTARCH", "")
|
||||
|
||||
+ bingopath := pathf("%s/bin/%s_%s/go", goroot_bootstrap, hostos, hostarch)
|
||||
+ if _, err := os.Stat(bingopath); os.IsNotExist(err) {
|
||||
+ bingopath = pathf("%s/bin/go", goroot_bootstrap)
|
||||
+ }
|
||||
+
|
||||
// Run Go 1.4 to build binaries.
|
||||
- run(workspace, ShowOutput|CheckExit, pathf("%s/bin/go", goroot_bootstrap), "install", "-v", "bootstrap/...")
|
||||
+ run(workspace, ShowOutput|CheckExit, bingopath, "install", "-v", "bootstrap/...")
|
||||
|
||||
// Copy binaries into tool binary directory.
|
||||
for _, name := range bootstrapDirs {
|
||||
diff --git a/src/make.bash b/src/make.bash
|
||||
index f17648a..77f463c 100755
|
||||
--- a/src/make.bash
|
||||
+++ b/src/make.bash
|
||||
@@ -113,12 +113,17 @@ echo '##### Building Go bootstrap tool.'
|
||||
echo cmd/dist
|
||||
export GOROOT="$(cd .. && pwd)"
|
||||
GOROOT_BOOTSTRAP=${GOROOT_BOOTSTRAP:-$HOME/go1.4}
|
||||
-if [ ! -x "$GOROOT_BOOTSTRAP/bin/go" ]; then
|
||||
- echo "ERROR: Cannot find $GOROOT_BOOTSTRAP/bin/go." >&2
|
||||
+if [ -x "$GOROOT_BOOTSTRAP/bin/${GOHOSTOS}_${GOHOSTARCH}/go" ]; then
|
||||
+ rm -f cmd/dist/dist
|
||||
+ GOROOT="$GOROOT_BOOTSTRAP" GOOS="" GOARCH="" "$GOROOT_BOOTSTRAP/bin/${GOHOSTOS}_${GOHOSTARCH}/go" build -o cmd/dist/dist ./cmd/dist
|
||||
+elif [ -x "$GOROOT_BOOTSTRAP/bin/go" ]; then
|
||||
+ rm -f cmd/dist/dist
|
||||
+ GOROOT="$GOROOT_BOOTSTRAP" GOOS="" GOARCH="" "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist
|
||||
+else
|
||||
+ echo "ERROR: Cannot find $GOROOT_BOOTSTRAP/bin/${GOHOSTOS}_${GOHOSTARCH}/go." >&2
|
||||
+ echo "ERROR: or $GOROOT_BOOTSTRAP/bin/${GOHOSTOS}_${GOHOSTARCH}/go." >&2
|
||||
echo "Set \$GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4." >&2
|
||||
fi
|
||||
-rm -f cmd/dist/dist
|
||||
-GOROOT="$GOROOT_BOOTSTRAP" GOOS="" GOARCH="" "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist
|
||||
|
||||
# -e doesn't propagate out of eval, so check success by hand.
|
||||
eval $(./cmd/dist/dist env -p || echo FAIL=true)
|
|
@ -1,3 +0,0 @@
|
|||
# there are ELF files in src which are testdata and shouldn't be modified
|
||||
-b /usr/lib/golang/src
|
||||
-b /usr/lib64/golang/src
|
1003
golang.spec
1003
golang.spec
File diff suppressed because it is too large
Load Diff
|
@ -1,8 +0,0 @@
|
|||
# Where to set GOPATH for builds. Like:
|
||||
# export GOPATH=$(pwd)/_build:%{gopath}
|
||||
%gopath %{_datadir}/gocode
|
||||
|
||||
# for use like:
|
||||
# ExclusiveArch: %{go_arches}
|
||||
%go_arches %{ix86} x86_64 %{arm}
|
||||
|
Loading…
Reference in New Issue