From fbe6b57b7477edfe10bb39934790ad9ba3d52846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Hentschel?= Date: Sun, 1 Nov 2009 18:59:20 +0100 Subject: [PATCH] msvcrt: Do not overlap in strcpy (Valgrind). --- dlls/msvcrt/math.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c index 010e1a69d23..315cdcdf5a6 100644 --- a/dlls/msvcrt/math.c +++ b/dlls/msvcrt/math.c @@ -836,7 +836,7 @@ double CDECL _nextafter(double num, double next) */ char * CDECL _ecvt( double number, int ndigits, int *decpt, int *sign ) { - int prec; + int prec, len; thread_data_t *data = msvcrt_get_thread_data(); /* FIXME: check better for overflow (native supports over 300 chars's) */ ndigits = min( ndigits, 80 - 7); /* 7 : space for dec point, 1 for "e", @@ -853,10 +853,10 @@ char * CDECL _ecvt( double number, int ndigits, int *decpt, int *sign ) /* handle cases with zero ndigits or less */ prec = ndigits; if( prec < 1) prec = 2; - snprintf(data->efcvt_buffer, 80, "%.*le", prec - 1, number); + len = 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, len - 1 ); /* take the exponential "e" out */ data->efcvt_buffer[ prec] = '\0'; /* read the exponent */