On 4/26/11, Steven Schveighoffer <[email protected]> wrote:
> On Tue, 26 Apr 2011 13:11:20 -0400, Andrej Mitrovic
> <[email protected]> wrote:
>
>> On 4/26/11, Timon Gehr <[email protected]> wrote:
>>>> Isn't it dangerous to pass a D string and let the C code overwrite the
>>>> string, regardless of char* vs .ptr field?
>>>
>>> There is a possibility for buffer overflow.
>>>
>>
>> No, I mean the C function will overwrite an immutable string.
>
> D would not allow you to pass a .ptr field of an immutable string, because
> the type would be immutable(char)* and wouldn't implicitly cast to the
> required char* argument. Casting, however, would mask that problem and
> probably overwrite immutable data (and probably segfault on Linux).
> Another example of why casting is bad.
>
> for example, this should throw an error:
>
> import std.stdio;
>
> void main()
> {
> sprintf("buf".ptr, "%d", 12345);
> }
>
> -Steve
>
Yes I was refering to casting. It would segfault on Linux but probably
not on Windows, which brings us to the infamous string literal
assignment bug:
void main()
{
"hello" = "red";
string x = "hello";
assert(x == "red");
}
http://d.puremagic.com/issues/show_bug.cgi?id=4539