[Issue 19968] New: @safe code can create invalid bools resulting in memory corruption
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Jun 15 09:12:53 UTC 2019
https://issues.dlang.org/show_bug.cgi?id=19968
Issue ID: 19968
Summary: @safe code can create invalid bools resulting in
memory corruption
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: tim.dlang at t-online.de
Variables of type bool are expected to be 0 or 1. Using void initialization
this invariant can be wrong. This can result in memory corruption. See the
following example:
import std.stdio;
static int[2] data;
static int[253] data2;
void test(bool b) @safe
{
data[b]++;
}
void main() @safe
{
bool b = void;
writeln(data, data2);
test(b);
writeln(data, data2);
}
It can happen, that data2 is modified here.
See http://forum.dlang.org/post/brxxdumxnzktcjjjvedo@forum.dlang.org for
reference.
Another problem is, that the code generation for !b assumes b is 0 or 1. The
following code shows, that bools can seem to be true and false at the same
time:
import std.stdio;
void main() @safe
{
bool b = void;
if(b)
writeln("b seems to be true");
if(!b)
writeln("b seems to be false");
}
@trusted functions, that are correct for true and false may result in memory
corruption for invalid values.
See http://forum.dlang.org/reply/yrncciusmngbcxztnhyn@forum.dlang.org for
reference.
--
More information about the Digitalmars-d-bugs
mailing list