The documentation for `decode` states: "If the code point is not well-formed, then a UTFException is thrown and index remains unchanged." However, fuzzing with /dev/urandom found that this import std.conv; import std.format; import std.utf; void main() { string data = hexString!"f787a598"; size_t offset = 0; try { data.decode(offset); } catch (UTFException ex) { assert(offset == 0, "offset changed to %s despite exception %s".format(offset, ex.msg)); } } fails.
@aG0aep6G created dlang/phobos pull request #8408 "fix issue 22867 - std.utf.decode changes offset despite error." fixing this issue: - fix issue 22867 - std.utf.decode changes offset despite error. https://github.com/dlang/phobos/pull/8408
dlang/phobos pull request #8408 "fix issue 22867 - std.utf.decode changes offset despite error." was merged into master: - 3a97e4a9e97debb6c6d5c7460a52efd3e5d9250c by aG0aep6G: fix issue 22867 - std.utf.decode changes offset despite error. https://github.com/dlang/phobos/pull/8408