On Wednesday, 21 September 2016 at 12:20:14 UTC, Adam D. Ruppe wrote:

This is a pretty common pitfall (and IMO one of the most egregious design flaws in the language), I see it all the time.

I write very little D code, so I guess it had to happen at some point then. Man, this is really bad :((

toHexString, when given a static array, returns a static array, but the language allows you to implicitly slice that into a pointer (mistaken design in any case, doubly so since it a stack pointer)... and moreover it is implicitly cast to immutable!

Thanks for the explanation.
It should really be mentioned in the documentation of toHexString, with an actual example instead of a unittest.
The original code was doing:
    MD5 md5;
    md5.put(cast(const(ubyte)[]) "some interesting data");
    auto hash = md5.finish();
    return toHexString!(LetterCase.lower)(hash);

I guess `ubyte[] hash = md5.finish();` would have fixed it too.

Reply via email to