Mercurial > cpython-lru_cache-weakref
diff Objects/stringobject.c @ 36866:9eb24f92a784 legacy-trunk
Change int to Py_ssize_t in several places.
Add (int) casts to silence compiler warnings.
Raise Python exceptions for overflows.
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Tue, 07 Mar 2006 12:08:51 +0000 |
| parents | dba6494735d0 |
| children | e9a7a2784e17 |
line wrap: on
line diff
--- a/Objects/stringobject.c Tue Mar 07 11:58:50 2006 +0000 +++ b/Objects/stringobject.c Tue Mar 07 12:08:51 2006 +0000 @@ -3679,6 +3679,7 @@ Py_ssize_t i; int sign; /* 1 if '-', else 0 */ int len; /* number of characters */ + Py_ssize_t llen; int numdigits; /* len == numnondigits + numdigits */ int numnondigits = 0; @@ -3707,7 +3708,12 @@ return NULL; } buf = PyString_AsString(result); - len = PyString_Size(result); + llen = PyString_Size(result); + if (llen > INT_MAX) { + PyErr_SetString(PyExc_ValueError, "string too large in _PyString_FormatLong"); + return NULL; + } + len = (int)llen; if (buf[len-1] == 'L') { --len; buf[len] = '\0'; @@ -3941,12 +3947,12 @@ PyObject *temp = NULL; char *pbuf; int sign; - int len; + Py_ssize_t len; char formatbuf[FORMATBUFLEN]; /* For format{float,int,char}() */ #ifdef Py_USING_UNICODE char *fmt_start = fmt; - int argidx_start = argidx; + Py_ssize_t argidx_start = argidx; #endif fmt++; @@ -4139,8 +4145,10 @@ if (c == 'i') c = 'd'; if (PyLong_Check(v)) { + int ilen; temp = _PyString_FormatLong(v, flags, - prec, c, &pbuf, &len); + prec, c, &pbuf, &ilen); + len = ilen; if (!temp) goto error; sign = 1;
