]> Cypherpunks repositories - gostls13.git/commitdiff
gc: disallow absolute import paths
authorRuss Cox <rsc@golang.org>
Wed, 29 Feb 2012 20:28:36 +0000 (15:28 -0500)
committerRuss Cox <rsc@golang.org>
Wed, 29 Feb 2012 20:28:36 +0000 (15:28 -0500)
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
test/import5.go

index 140153a646709ebe257238ae5324808e55917856..b393bccc457bd10df40c7b74270e283b83c83bca 100644 (file)
@@ -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, "/");
index 02d443b2e2b81ffaa3c1eb3eb967c258256026b6..6480acff92c52ea36ecb5cb54c30f1006f12142a 100644 (file)
@@ -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"