Mercurial > cpython-lru_cache-weakref
comparison Python/errors.c @ 39995:6ba402b60041 legacy-trunk
Forward-port of r52136,52138: a review of overflow-detecting code.
* unified the way intobject, longobject and mystrtoul handle
values around -sys.maxint-1.
* in general, trying to entierely avoid overflows in any computation
involving signed ints or longs is extremely involved. Fixed a few
simple cases where a compiler might be too clever (but that's all
guesswork).
* more overflow checks against bad data in marshal.c.
* 2.5 specific: fixed a number of places that were still confusing int
and Py_ssize_t. Some of them could potentially have caused
"real-world" breakage.
* list.pop(x): fixing overflow issues on x was messy. I just reverted
to PyArg_ParseTuple("n"), which does the right thing. (An obscure
test was trying to give a Decimal to list.pop()... doesn't make
sense any more IMHO)
* trying to write a few tests...
| author | Armin Rigo <arigo@tunes.org> |
|---|---|
| date | Wed, 04 Oct 2006 12:17:45 +0000 |
| parents | 40585fb387bb |
| children | 45c73152b4ac |
comparison
equal
deleted
inserted
replaced
| 39992:0c36410c39e8 | 39995:6ba402b60041 |
|---|---|
| 549 dict = mydict = PyDict_New(); | 549 dict = mydict = PyDict_New(); |
| 550 if (dict == NULL) | 550 if (dict == NULL) |
| 551 goto failure; | 551 goto failure; |
| 552 } | 552 } |
| 553 if (PyDict_GetItemString(dict, "__module__") == NULL) { | 553 if (PyDict_GetItemString(dict, "__module__") == NULL) { |
| 554 modulename = PyString_FromStringAndSize(name, (int)(dot-name)); | 554 modulename = PyString_FromStringAndSize(name, |
| 555 (Py_ssize_t)(dot-name)); | |
| 555 if (modulename == NULL) | 556 if (modulename == NULL) |
| 556 goto failure; | 557 goto failure; |
| 557 if (PyDict_SetItemString(dict, "__module__", modulename) != 0) | 558 if (PyDict_SetItemString(dict, "__module__", modulename) != 0) |
| 558 goto failure; | 559 goto failure; |
| 559 } | 560 } |
