local import hijacking

anonymous via Digitalmars-d digitalmars-d at puremagic.com
Thu Jan 14 07:17:41 PST 2016


On 14.01.2016 15:25, Byron Heads wrote:
> I got burned by this yesterday, this code should not compile
>
> import std.experimental.logger : trace;
>
>
> void foo() {
>      import std.net.curl : trace;
>      trace("hello");
> }
>
>
> void main() {
>      foo();
> }

I don't see a problem with that specific code. You're explicitly 
importing `trace` from std.net.curl, so it can't be surprising that it's 
called.

But change one little detail and this qualifies as hijacking, I think:

----
void foo() {
     import std.net.curl; /* not mentioning trace */
     trace("hello");
}
----

Imagine that std.net.curl didn't have a `trace` function when the code 
was written. std.experimental.logger.trace would have been called then. 
When a `trace` function is then added to std.net.curl, the code suddenly 
calls a different `trace`, without any warning. Hijacking.


More information about the Digitalmars-d mailing list