Bug in -J

Vladimir Panteleev via Digitalmars-d digitalmars-d at puremagic.com
Fri Aug 11 23:02:57 PDT 2017


On Saturday, 12 August 2017 at 05:42:21 UTC, Mr. Pib wrote:
> I'm pretty sure that on no OS does the same location mean 
> different things?

I understand what you mean, but just to clarify on the .. thing:

$ mkdir d d/x d/z
$ ln -s d/z x
$ echo foo > d/z/y
$ echo bar > d/x/y
$ cat x/y
foo
+ cat x/../x/y
bar

> I am not talking about strange stuff but simple stuff.
>
> I have code that loads a file at runtime and requires the 
> absolute path. This is only for debugging purposes. When built 
> in release, everything is switched over to use imports and 
> embed the files in the binary. The same path is used for other 
> things like caching/uniqueID but are never actually read from. 
> You see this sort of stuff a lot when you open an executable 
> and see hard coded paths but obviously never used for file 
> system purposes.

Sounds like you can also work around it using e.g.

enum appRoot = `C:\Temp\`;
debug
     string data = readText(appRoot ~ "a.dat");
else
     enum data = import("a.dat");

(and build with -JC:\Temp).

That should now also work if a.dat is in a subdirectory relative 
to the -J path.

> The files and paths are all the same but import doens't seem to 
> think so. Adding baseName solves the problem immediately but 
> that is a hack. import should know that the path is the same as 
> the one specified by -J. The whole point of -J is to specify 
> the path for security purposes, right? So why does it matter if 
> I use path\filename or baseName(filename)? Both point to the 
> same location and both are consistent with -J, import should 
> understand that. It is an obvious oversight. But there is an 
> obvious programmatic difference between the two versions. 
> Luckily, using baseName does fix the problem so it is not a 
> huge deal but it is still a bug/issue with import for being 
> ignorant of what it is actually doing.

Sounds reasonable, the compiler could check if paths start with a 
-J path.



More information about the Digitalmars-d mailing list