[Issue 16385] New: std.range: undefined behaviour when skipping over 0xff in string.popFront

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Sun Aug 14 02:30:06 PDT 2016


https://issues.dlang.org/show_bug.cgi?id=16385

          Issue ID: 16385
           Summary: std.range: undefined behaviour when skipping over 0xff
                    in string.popFront
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: normal
          Priority: P1
         Component: phobos
          Assignee: nobody at puremagic.com
          Reporter: r.sagitario at gmx.de

This unittest in std.exception:

pure @safe unittest
{
    import std.algorithm : equal;
    import std.range : retro;
    import std.utf : UTFException;

    auto str = "hello\xFFworld"; // 0xFF is an invalid UTF-8 code unit

    auto handled = str.handle!(UTFException, RangePrimitive.access,
            (e, r) => ' '); // Replace invalid code points with spaces

    assert(handled.equal("hello world")); // `front` is handled,
}

fails for me depending on compilation options and platform.

This happens because string.popFront uses the intrinsic bsr, but doesn't check
the undefined case when the argument is 0.

--


More information about the Digitalmars-d-bugs mailing list