From: Gregor Schneider Date: Wed, 5 Aug 2009 02:02:25 +0000 (+0000) Subject: -_ecvt really uses a static buffer for return values X-Git-Tag: ReactOS-0.3.11~1409 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=0e0ee67a1ac641e8bc52d98eea12be4a796a8ccb;hp=313b147b5f124e897ceaa2be8bc36c9488340597 -_ecvt really uses a static buffer for return values -Handle memory allocation failure svn path=/trunk/; revision=42401 --- diff --git a/reactos/lib/sdk/crt/stdlib/ecvt.c b/reactos/lib/sdk/crt/stdlib/ecvt.c index d7e48db80bc..e5dca6ca61d 100644 --- a/reactos/lib/sdk/crt/stdlib/ecvt.c +++ b/reactos/lib/sdk/crt/stdlib/ecvt.c @@ -14,16 +14,16 @@ char * _ecvt (double value, int ndigits, int *decpt, int *sign) { - char *ecvtbuf, *cvtbuf; - char *s, *d; + static char ecvtbuf[DBL_MAX_10_EXP + 10]; + char *cvtbuf, *s, *d; s = cvtbuf = (char*)malloc(ndigits + 18); /* sign, dot, null, 15 for alignment */ - d = ecvtbuf = (char*)malloc(DBL_MAX_10_EXP + 10); + d = ecvtbuf; *sign = 0; *decpt = 0; - if (cvtbuf == NULL || ecvtbuf == NULL) + if (cvtbuf == NULL) { return NULL; } @@ -91,6 +91,11 @@ _ecvt (double value, int ndigits, int *decpt, int *sign) { /* Need enhanced precision*/ char* tbuf = (char*)malloc(ndigits + 18); + if (tbuf == NULL) + { + free(cvtbuf); + return NULL; + } sprintf(tbuf, "%-+.*E", ndigits + 2, value); if (tbuf[1] >= '5') {