----- Original Message ----
> From: Walter Bright <[email protected]>
> 
> 
> 
> Steve Schveighoffer wrote:
> > Currently, there is a problem in the  runtime which can result in very odd 
>behavior.  Let's say you declare a  class like this:
> > 
> > class C
> > {
> >    int[1]  x;
> > }
> > 
> > Now, let's say you do something like this:
> > 
> > auto c = new C;
> > auto x = c.x[];
> > x ~= 1;
> > 
> > What happens here?  Well, the memory for c and  c.x are on  the heap, so 
> > the 
>block allocated by c is considered for appending, and a  "length" field is 
>looked at, even though that length is possibly garbage.   The result is that 
>it's extremely improbable, but possible, that the append  could happen in 
>place 
>if that "length" happens to be correct (thereby  overwriting other members of 
>c).  I can't even begin to construct a case  which shows this is possible, and 
>it may not even be, but I think this needs  attention.
> > 
> >  
> 
> It will never happen, as c.x[1] is  not at the beginning of an allocated  
>block.

That is no longer a requirement with the new array append functionality.  All 
that is required is that the end of an array is at the end of the "allocated" 
data (that is, data that has been requested from the array append routines).

-Steve



      
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to