[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-devel
Subject: Re: msvcrt: do not overlap in strcpy (valgrind) (try 2)
From: Vitaliy Margolen <wine-devel () kievinfo ! com>
Date: 2009-10-31 15:54:31
Message-ID: 4AEC5DB7.3070507 () kievinfo ! com
[Download RAW message or body]
André Hentschel wrote:
> Vitaliy Margolen schrieb:
>> André Hentschel wrote:
>>> diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c
>>> index 010e1a6..08eaf73 100644
>>> --- a/dlls/msvcrt/math.c
>>> +++ b/dlls/msvcrt/math.c
>>> @@ -856,7 +856,7 @@ char * CDECL _ecvt( double number, int ndigits, int *decpt, int *sign )
>>> snprintf(data->efcvt_buffer, 80, "%.*le", prec - 1, number);
>>> /* take the decimal "point away */
>>> if( prec != 1)
>>> - strcpy( data->efcvt_buffer + 1, data->efcvt_buffer + 2);
>>> + memmove( data->efcvt_buffer + 1, data->efcvt_buffer + 2, strlen(data->efcvt_buffer) );
>> You don't need additional strlen. You already have a length from snprintf
>> (that's returned but not assigned to anything).
>>
>>
> thx again, really didnt got that.
>
> - strcpy( data->efcvt_buffer + 1, data->efcvt_buffer + 2);
> + memmove( data->efcvt_buffer + 1, data->efcvt_buffer + 2, len );
You still have a problem here. You moving 1 byte too many. Remember, memmove
is not a string function and doesn't care about '\0' characters.
Vitaliy.
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic