From d0d251f858efa75fc67ab8804413edfec57cc2db Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 29 Feb 2012 15:28:36 -0500 Subject: [PATCH] gc: disallow absolute import paths They are broken and hard to make work. They have never worked: if you import "/tmp/x" from "/home/rsc/p.c" then the compiler rewrites this into import "/home/rsc/tmp/x", which is clearly wrong. Also we just disallowed the : character in import paths, so import "c:/foo" is already not allowed. Finally, in order to support absolute paths well in a build tool we'd have to provide a mechanism to instruct the compiler to resolve absolute imports by looking in some other tree (where the binaries live) and provide a mapping from absolute path to location in that tree. This CL avoids adding that complexity. This is not part of the language spec (and should not be), so no spec change is needed. If we need to make them work later, we can. R=ken2 CC=golang-dev https://golang.org/cl/5712043 --- src/cmd/gc/lex.c | 5 +++++ test/import5.go | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c index 140153a646..b393bccc45 100644 --- a/src/cmd/gc/lex.c +++ b/src/cmd/gc/lex.c @@ -637,6 +637,11 @@ importfile(Val *f, int line) path = f->u.sval; if(islocalname(path)) { + if(path->s[0] == '/') { + yyerror("import path cannot be absolute path"); + fakeimport(); + return; + } cleanbuf = mal(strlen(pathname) + strlen(path->s) + 2); strcpy(cleanbuf, pathname); strcat(cleanbuf, "/"); diff --git a/test/import5.go b/test/import5.go index 02d443b2e2..6480acff92 100644 --- a/test/import5.go +++ b/test/import5.go @@ -49,3 +49,7 @@ import "\x80\x80" // ERROR "import path" import `\x80\x80` // ERROR "import path" import "\xFFFD" // ERROR "import path" import `\xFFFD` // ERROR "import path" + +// Invalid local imports. +import "/foo" // ERROR "import path cannot be absolute path" +import "c:/foo" // ERROR "import path contains invalid character"