April 25, 2023 [Issue 23859] New: [REG 2.103] Throwing while in a deep callstack causes memory corruption | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=23859 Issue ID: 23859 Summary: [REG 2.103] Throwing while in a deep callstack causes memory corruption Product: D Version: D2 Hardware: All OS: Windows Status: NEW Severity: regression Priority: P1 Component: druntime Assignee: nobody@puremagic.com Reporter: r.sagitario@gmx.de When compiling this snippet module test; void* recurse(int n) { if (n > 0) return recurse(n - 1) + 1; // avoid tail call optimization throw new Exception("cancel"); } void main() { try { recurse(200); } catch(Exception e) { } } with dmd 2.103.0 and running it on Windows with > dmd -m64 test.d > test.exe > echo %errorlevel% -1073740940 The exit code is 0xC0000374 and reports a critical error, a heap corruption in this case. -- |
Copyright © 1999-2021 by the D Language Foundation