From 6c2458e72d85dd0d388e4d27b6b361899084d526 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Fri, 16 Jun 2017 14:48:38 -0700 Subject: [PATCH] cmd/compile: permit Unicode spaces in (expanded) package paths This doesn't change the existing restriction with disallows spaces in import paths (as found in an import declaration). It simply permits packages to be under a directory name that may contain spaces. Verified manually that it works. This could use a test, but the change is trivial. We also can't use the existing test framework (under test/) because the way those tests are run with test/run.go, the mechanims for compiling a directory, even if it contains blanks it its name, does't produce compiler paths with blanks (the compilation is local). Fixes #20306. Change-Id: I6cbffb86c3394347897c3c94b110da0aadc5bfdf Reviewed-on: https://go-review.googlesource.com/46001 Reviewed-by: Russ Cox Reviewed-by: Rob Pike --- src/cmd/compile/internal/gc/bimport.go | 2 +- src/cmd/compile/internal/gc/main.go | 4 ++-- src/cmd/compile/internal/gc/subr.go | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/cmd/compile/internal/gc/bimport.go b/src/cmd/compile/internal/gc/bimport.go index 282f8766e2..2962962089 100644 --- a/src/cmd/compile/internal/gc/bimport.go +++ b/src/cmd/compile/internal/gc/bimport.go @@ -285,7 +285,7 @@ func (p *importer) pkg() *types.Pkg { } // we should never see a bad import path - if isbadimport(path) { + if isbadimport(path, true) { p.formatErrorf("bad package path %q for package %s", path, name) } diff --git a/src/cmd/compile/internal/gc/main.go b/src/cmd/compile/internal/gc/main.go index 57c6600b15..5e30302970 100644 --- a/src/cmd/compile/internal/gc/main.go +++ b/src/cmd/compile/internal/gc/main.go @@ -891,7 +891,7 @@ func importfile(f *Val) *types.Pkg { return nil } - if isbadimport(path_) { + if isbadimport(path_, false) { return nil } @@ -935,7 +935,7 @@ func importfile(f *Val) *types.Pkg { } path_ = path.Join(prefix, path_) - if isbadimport(path_) { + if isbadimport(path_, true) { return nil } } diff --git a/src/cmd/compile/internal/gc/subr.go b/src/cmd/compile/internal/gc/subr.go index 566403bcde..d79789c4fe 100644 --- a/src/cmd/compile/internal/gc/subr.go +++ b/src/cmd/compile/internal/gc/subr.go @@ -1969,7 +1969,7 @@ var reservedimports = []string{ "type", } -func isbadimport(path string) bool { +func isbadimport(path string, allowSpace bool) bool { if strings.Contains(path, "\x00") { yyerror("import path contains NUL") return true @@ -1998,7 +1998,7 @@ func isbadimport(path string) bool { return true } - if unicode.IsSpace(r) { + if !allowSpace && unicode.IsSpace(r) { yyerror("import path contains space character: %q", path) return true }