summaryrefslogtreecommitdiff
path: root/Python/marshal.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/marshal.c')
-rw-r--r--Python/marshal.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/Python/marshal.c b/Python/marshal.c
index e5e5ce447b..0d551322d1 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -236,12 +236,15 @@ w_object(PyObject *v, WFILE *p)
w_string((char*)buf, 8, p);
}
else {
- char buf[256]; /* Plenty to format any double */
- n = _PyFloat_Repr(PyFloat_AS_DOUBLE(v),
- buf, sizeof(buf));
+ char *buf = PyOS_double_to_string(PyFloat_AS_DOUBLE(v),
+ 'r', 0, 0, NULL);
+ if (!buf)
+ return;
+ n = strlen(buf);
w_byte(TYPE_FLOAT, p);
w_byte((int)n, p);
w_string(buf, (int)n, p);
+ PyMem_Free(buf);
}
}
#ifndef WITHOUT_COMPLEX
@@ -263,17 +266,24 @@ w_object(PyObject *v, WFILE *p)
w_string((char*)buf, 8, p);
}
else {
- char buf[256]; /* Plenty to format any double */
+ char *buf;
w_byte(TYPE_COMPLEX, p);
- n = _PyFloat_Repr(PyComplex_RealAsDouble(v),
- buf, sizeof(buf));
+ buf = PyOS_double_to_string(PyComplex_RealAsDouble(v),
+ 'r', 0, 0, NULL);
+ if (!buf)
+ return;
n = strlen(buf);
w_byte((int)n, p);
w_string(buf, (int)n, p);
- n = _PyFloat_Repr(PyComplex_ImagAsDouble(v),
- buf, sizeof(buf));
+ PyMem_Free(buf);
+ buf = PyOS_double_to_string(PyComplex_ImagAsDouble(v),
+ 'r', 0, 0, NULL);
+ if (!buf)
+ return;
+ n = strlen(buf);
w_byte((int)n, p);
w_string(buf, (int)n, p);
+ PyMem_Free(buf);
}
}
#endif