array.reverse segfaults

Moritz Warning moritzwarning at web.de
Wed Oct 22 04:21:03 PDT 2008


On Wed, 22 Oct 2008 13:10:20 +0200, Tomas Lindquist Olsen wrote:

> Tomas Lindquist Olsen wrote:
>> Moritz Warning wrote:
>>> Hi,
>>>
>>> This piece of code segfaults on Debian Linux (with dmd 1.035): Can
>>> someone tell me why?
>>>
>>> char[] get(char[] str)
>>> {
>>>     return new char[](4);
>>> }
>>>
>>> void main(char[][] args)
>>> {
>>>     char[] str =  get("abc");
>>>    char[] reversed = str.reverse; // <-- access violation
>>> }
>> 
>> Simpler version:
>> 
>> void main()
>> {
>>     char[4] str;
>>     str.reverse;
>> }
>> 
>> Crashes in _adReverseChar when trying to memmove (3 - 255) bytes ;)
>> 
>> My best guess is that is just doesn't handle char.init values properly!
> 
> When it tries to get the lower stride, it gets 0xFF from the table, but
> it doesn't check if this value is usable.
> 
> Probably just ignoring these invalid bytes would make it work. But I
> think the real question is, what should _adReverseChar really do on
> invalid UTF-8 input?

I think it should do the same as on an invalid pointer: result in 
undefined behavior (=> segfault).



More information about the Digitalmars-d mailing list