From: Tim Peters <tim.peters@gmail.com> Date: Thu, 16 Feb 2006 01:08:01 +0000 (+0000) Subject: doubletounicode(), longtounicode(): X-Git-Tag: v2.5a0~668 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=15231548d20b2a6fcac2830935ec076bed42448f;p=python doubletounicode(), longtounicode(): Py_SAFE_DOWNCAST can evaluate its first argument multiple times in a debug build. This caused two distinct assert- failures in test_unicode run under a debug build. Rewrote the code in trivial ways so that multiple evaluation of the first argument doesn't hurt. --- diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index e09a1a804d..1652b2fed0 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -6601,17 +6601,21 @@ strtounicode(Py_UNICODE *buffer, const char *charbuffer) static int doubletounicode(Py_UNICODE *buffer, size_t len, const char *format, double x) { + Py_ssize_t result; + PyOS_ascii_formatd((char *)buffer, len, format, x); - return Py_SAFE_DOWNCAST(strtounicode(buffer, (char *)buffer), - Py_ssize_t, int); + result = strtounicode(buffer, (char *)buffer); + return Py_SAFE_DOWNCAST(result, Py_ssize_t, int); } static int longtounicode(Py_UNICODE *buffer, size_t len, const char *format, long x) { + Py_ssize_t result; + PyOS_snprintf((char *)buffer, len, format, x); - return Py_SAFE_DOWNCAST(strtounicode(buffer, (char *)buffer), - Py_ssize_t, int); + result = strtounicode(buffer, (char *)buffer); + return Py_SAFE_DOWNCAST(result, Py_ssize_t, int); } /* XXX To save some code duplication, formatfloat/long/int could have been