Thread overview
Importing text file, path not found
Feb 18, 2014
bearophile
Feb 18, 2014
Dicebot
Feb 18, 2014
Tolga Cakiroglu
Feb 18, 2014
Dicebot
February 18, 2014
I am testing with the import expression. I am using the "-J" flag while compiling.

dmd app.d -J/home/user/include


void main(){
	auto test = json.parseJSON( import("/home/user/include/test.json") );
}


1. Because I am giving the full path of that file to be imported. But compiler is complaining about that it cannot find the file. If I remove the path, and leave the file name only, it works. Am I doing something wrong, or bug?

2. Why do I need to tell compiler where to look at if I am going to tell where the file is already? Shouldn't it be like "Hey compiler, if you cannot while the file, look at those places", and I shouldn't need to use J flag if not necessary?
February 18, 2014
On Tuesday, 18 February 2014 at 08:45:16 UTC, Tolga Cakiroglu (tcak) wrote:
> I am testing with the import expression. I am using the "-J" flag while compiling.
>
> dmd app.d -J/home/user/include
>
>
> void main(){
> 	auto test = json.parseJSON( import("/home/user/include/test.json") );
> }
>
>
> 1. Because I am giving the full path of that file to be imported. But compiler is complaining about that it cannot find the file. If I remove the path, and leave the file name only, it works. Am I doing something wrong, or bug?
>
> 2. Why do I need to tell compiler where to look at if I am going to tell where the file is already? Shouldn't it be like "Hey compiler, if you cannot while the file, look at those places", and I shouldn't need to use J flag if not necessary?

- Grammar issues -

1. Because I am giving the full path of that file to be
imported, compiler is complaining about that it cannot find
the file. If I remove the path, and leave the file name only,
it works. Am I doing something wrong, or bug?

2. Why do I need to tell compiler where to look at if I am
going to tell where the file is already? Shouldn't it be like
"Hey compiler, if you cannot find the file, look at those
places", and I shouldn't need to use J flag if not necessary?
February 18, 2014
Tolga Cakiroglu (tcak):

> 1. Because I am giving the full path of that file to be
> imported, compiler is complaining about that it cannot find
> the file. If I remove the path, and leave the file name only,
> it works. Am I doing something wrong, or bug?
>
> 2. Why do I need to tell compiler where to look at if I am
> going to tell where the file is already? Shouldn't it be like
> "Hey compiler, if you cannot find the file, look at those
> places", and I shouldn't need to use J flag if not necessary?

It seems things are working as designed.

The J flag is meant for security.

Bye,
bearophile
February 18, 2014
On Tuesday, 18 February 2014 at 08:45:16 UTC, Tolga Cakiroglu (tcak) wrote:
> 1. Because I am giving the full path of that file to be imported. But compiler is complaining about that it cannot find the file. If I remove the path, and leave the file name only, it works. Am I doing something wrong, or bug?
>
> 2. Why do I need to tell compiler where to look at if I am going to tell where the file is already? Shouldn't it be like "Hey compiler, if you cannot while the file, look at those places", and I shouldn't need to use J flag if not necessary?

It is a matter of security I think. By restricting imports to only explicitly allowed locations and prohibiting fully-qualified paths dmd guarantees you that compiled program won't access anything outside of that sandbox. That way compilation process stays relatively safe.
February 18, 2014
On Tuesday, 18 February 2014 at 09:24:50 UTC, Dicebot wrote:
> On Tuesday, 18 February 2014 at 08:45:16 UTC, Tolga Cakiroglu (tcak) wrote:
>> 1. Because I am giving the full path of that file to be imported. But compiler is complaining about that it cannot find the file. If I remove the path, and leave the file name only, it works. Am I doing something wrong, or bug?
>>
>> 2. Why do I need to tell compiler where to look at if I am going to tell where the file is already? Shouldn't it be like "Hey compiler, if you cannot while the file, look at those places", and I shouldn't need to use J flag if not necessary?
>
> It is a matter of security I think. By restricting imports to only explicitly allowed locations and prohibiting fully-qualified paths dmd guarantees you that compiled program won't access anything outside of that sandbox. That way compilation process stays relatively safe.

Hmm. Should I understand the sandbox as if I am going to be compiling someone else's code, only looking at -J flags will be enough to make sure it is not using any of my private files?
February 18, 2014
On Tuesday, 18 February 2014 at 10:10:14 UTC, Tolga Cakiroglu wrote:
> Hmm. Should I understand the sandbox as if I am going to be compiling someone else's code, only looking at -J flags will be enough to make sure it is not using any of my private files?

It is the intention. I can't guarantee there are no bugs that break that assumption though :)