From 0e0ee67a1ac641e8bc52d98eea12be4a796a8ccb Mon Sep 17 00:00:00 2001 From: Gregor Schneider Date: Wed, 5 Aug 2009 02:02:25 +0000 Subject: [PATCH 1/1] -_ecvt really uses a static buffer for return values -Handle memory allocation failure svn path=/trunk/; revision=42401 --- reactos/lib/sdk/crt/stdlib/ecvt.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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') { -- 2.17.1