[Python-checkins] cpython (merge 3.5 -> default): Issue #27581: Merge overflow fix from 3.5

martin.panter python-checkins at python.org
Sun Jul 24 23:44:25 EDT 2016


https://hg.python.org/cpython/rev/8f84942a0e40
changeset: 102447:8f84942a0e40
parent: 102445:128ad410c776
parent: 102446:ad3762227655
user: Martin Panter <vadmium+py at gmail.com>
date: Mon Jul 25 03:31:29 2016 +0000
summary:
 Issue #27581: Merge overflow fix from 3.5
files:
 Misc/NEWS | 3 +++
 Objects/abstract.c | 9 +++++----
 2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -13,6 +13,9 @@
 - Issue #27507: Add integer overflow check in bytearray.extend(). Patch by
 Xiang Zhang.
 
+- Issue #27581: Don't rely on wrapping for overflow check in
+ PySequence_Tuple(). Patch by Xiang Zhang.
+
 - Issue #27419: Standard __import__() no longer look up "__import__" in globals
 or builtins for importing submodules or "from import". Fixed a crash if
 raise a warning about unabling to resolve package from __spec__ or
diff --git a/Objects/abstract.c b/Objects/abstract.c
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -1747,21 +1747,22 @@
 break;
 }
 if (j >= n) {
- Py_ssize_t oldn = n;
+ size_t newn = (size_t)n;
 /* The over-allocation strategy can grow a bit faster
 than for lists because unlike lists the
 over-allocation isn't permanent -- we reclaim
 the excess before the end of this routine.
 So, grow by ten and then add 25%.
 */
- n += 10;
- n += n >> 2;
- if (n < oldn) {
+ newn += 10u;
+ newn += newn >> 2;
+ if (newn > PY_SSIZE_T_MAX) {
 /* Check for overflow */
 PyErr_NoMemory();
 Py_DECREF(item);
 goto Fail;
 }
+ n = (Py_ssize_t)newn;
 if (_PyTuple_Resize(&result, n) != 0) {
 Py_DECREF(item);
 goto Fail;
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /