Kaydet (Commit) 15231548 authored tarafından Tim Peters's avatar Tim Peters

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.
üst c7f6cf62
...@@ -6601,17 +6601,21 @@ strtounicode(Py_UNICODE *buffer, const char *charbuffer) ...@@ -6601,17 +6601,21 @@ strtounicode(Py_UNICODE *buffer, const char *charbuffer)
static int static int
doubletounicode(Py_UNICODE *buffer, size_t len, const char *format, double x) doubletounicode(Py_UNICODE *buffer, size_t len, const char *format, double x)
{ {
Py_ssize_t result;
PyOS_ascii_formatd((char *)buffer, len, format, x); PyOS_ascii_formatd((char *)buffer, len, format, x);
return Py_SAFE_DOWNCAST(strtounicode(buffer, (char *)buffer), result = strtounicode(buffer, (char *)buffer);
Py_ssize_t, int); return Py_SAFE_DOWNCAST(result, Py_ssize_t, int);
} }
static int static int
longtounicode(Py_UNICODE *buffer, size_t len, const char *format, long x) longtounicode(Py_UNICODE *buffer, size_t len, const char *format, long x)
{ {
Py_ssize_t result;
PyOS_snprintf((char *)buffer, len, format, x); PyOS_snprintf((char *)buffer, len, format, x);
return Py_SAFE_DOWNCAST(strtounicode(buffer, (char *)buffer), result = strtounicode(buffer, (char *)buffer);
Py_ssize_t, int); return Py_SAFE_DOWNCAST(result, Py_ssize_t, int);
} }
/* XXX To save some code duplication, formatfloat/long/int could have been /* XXX To save some code duplication, formatfloat/long/int could have been
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment