www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 19965] New: [DIP1000] Template allows to escape internal

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

          Issue ID: 19965
           Summary: [DIP1000] Template allows to escape internal pointer
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Keywords: safe
          Severity: critical
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: doob me.com

The following code compiles successfully with DIP1000 enabled:

struct Buffer
{
    int[10] data;

    int[] getData()  safe return
    {
        return data[];
    }
}

struct Foo()
{
    Buffer buffer;

    int[] toArray()  safe return
    {
        return buffer.getData;
    }
}

int[] a;

void main()  safe
{
    Foo!() f;
    a = f.toArray;
}

In the above example, a pointer to `data` (through the dynamic array returned
by `getData`) is escaped to `a`. If `Foo` is not a template the code fails to
compile, as expected.

--
Jun 14 2019