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

          Issue ID: 15704
           Summary: @safe code should not allow copying of void[]
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: major
          Priority: P1
         Component: dmd
          Assignee: [email protected]
          Reporter: [email protected]

-----
void main() @safe {
    Object[] objs = [ new Object() ];
    void[] arr1 = objs;
    void[] arr2 = [ 123, 345, 567 ];

    arr1[] = arr2[];  // overwrites pointers with arbitrary ints
}
-----

It should be illegal to copy the contents of one void[] to another void[],
since void[] by definition is a type-erased array and can represent any
arbitrary type, including types with indirections. Since type information has
been erased, there is no way to verify that the destination array has no
indirections, so to guarantee @safety, such an operation must not be allowed in
@safe code.

--

Reply via email to