On Wednesday, 26 October 2016 at 16:24:49 UTC, MakersF wrote:
On Wednesday, 26 October 2016 at 15:02:28 UTC, Stefam Koch wrote:
Who can guess what this code does ?


char[] obfuscatedFn(string a, string b, uint aLength = 0, uint bLength = 0, uint cLength = 0, uint pos = 0, uint bPos = 0, char[] result = [])
{
    aLength = cast(uint)a.length;
    bLength = cast(uint)a.length;
    cLength = aLength + bLength;
    result.length = cLength;
    while(aLength--)
    {
        result[pos] = a[pos];
        ++pos;
    }
    while(bLength--)
    {
        result[pos] = b[bPos++];
        ++pos;
    }

    return result;
}

Shouldn't
cLength = aLength + bLength;

actually be
cLength = aLength + bLength + pos;
?
Otherwise when pos is > 0 it writes past the end of result.

Same problem in the first and second loop, where the legths should probably be

    aLength = cast(uint)a.length - pos;
    bLength = cast(uint)a.length - bPos;

If you fix the a and b Length then cLength is fine.

Or am I missing something?

Ah the default paramters are never touched.
The reason they are there is because of the way the ctfe engine lowers parameters. It's easier to create byte-code macros if all used variables are function paramters :)

Reply via email to