mirror of
https://github.com/golang/go
synced 2024-11-21 12:44:40 -07:00
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
This commit is contained in:
parent
0201e373e5
commit
d0d251f858
@ -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, "/");
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user