From b0fee2cad44bf56ad9483ed0f42c29af83cb9485 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Sun, 14 Jan 2007 03:31:43 +0000 Subject: Merged the int/long unification branch, by very crude means (sorry Thomas!). I banged on the code (beyond what's in that branch) to make fewer tests fail; the only tests that fail now are: test_descr -- can't pickle ints?! test_pickletools -- ??? test_socket -- See python.org/sf/1619659 test_sqlite -- ??? I'll deal with those later. --- Objects/stringobject.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'Objects/stringobject.c') diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 61e6af5766..5f6d0a6dd3 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -4221,6 +4221,14 @@ _PyString_FormatLong(PyObject *val, int flags, int prec, int type, int numdigits; /* len == numnondigits + numdigits */ int numnondigits = 0; + /* Avoid exceeding SSIZE_T_MAX */ + if (prec > PY_SSIZE_T_MAX-3) { + PyErr_SetString(PyExc_OverflowError, + "precision too large"); + return NULL; + } + + switch (type) { case 'd': case 'u': @@ -4565,6 +4573,8 @@ PyString_Format(PyObject *format, PyObject *args) goto error; } width = PyInt_AsLong(v); + if (width == -1 && PyErr_Occurred()) + goto error; if (width < 0) { flags |= F_LJUST; width = -width; @@ -4602,6 +4612,8 @@ PyString_Format(PyObject *format, PyObject *args) goto error; } prec = PyInt_AsLong(v); + if (prec == -1 && PyErr_Occurred()) + goto error; if (prec < 0) prec = 0; if (--fmtcnt >= 0) -- cgit v1.2.1