Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
b5e8e575
Commit
b5e8e575
authored
Feb 03, 2015
by
Serhiy Storchaka
Browse files
Options
Browse Files
Download
Plain Diff
Issues #23363, #23364, #23365, #23366: Fixed itertools overflow tests.
Used PyMem_New to check overflow.
parents
4fdb6849
dee948b3
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
11 additions
and
27 deletions
+11
-27
Lib/test/test_itertools.py
Lib/test/test_itertools.py
+5
-7
Modules/itertoolsmodule.c
Modules/itertoolsmodule.c
+6
-20
No files found.
Lib/test/test_itertools.py
View file @
b5e8e575
...
...
@@ -266,7 +266,7 @@ class TestBasicOps(unittest.TestCase):
@
support
.
bigaddrspacetest
def
test_combinations_overflow
(
self
):
with
self
.
assertRaises
(
OverflowError
):
with
self
.
assertRaises
(
(
OverflowError
,
MemoryError
)
):
combinations
(
"AA"
,
2
**
29
)
# Test implementation detail: tuple re-use
...
...
@@ -353,7 +353,7 @@ class TestBasicOps(unittest.TestCase):
@
support
.
bigaddrspacetest
def
test_combinations_with_replacement_overflow
(
self
):
with
self
.
assertRaises
(
OverflowError
):
with
self
.
assertRaises
(
(
OverflowError
,
MemoryError
)
):
combinations_with_replacement
(
"AA"
,
2
**
30
)
# Test implementation detail: tuple re-use
...
...
@@ -428,10 +428,8 @@ class TestBasicOps(unittest.TestCase):
@
support
.
bigaddrspacetest
def
test_permutations_overflow
(
self
):
with
self
.
assertRaises
(
OverflowError
):
with
self
.
assertRaises
(
(
OverflowError
,
MemoryError
)
):
permutations
(
"A"
,
2
**
30
)
with
self
.
assertRaises
(
OverflowError
):
permutations
(
"A"
,
2
,
2
**
30
)
@
support
.
impl_detail
(
"tuple reuse is specific to CPython"
)
def
test_permutations_tuple_reuse
(
self
):
...
...
@@ -964,8 +962,8 @@ class TestBasicOps(unittest.TestCase):
@
support
.
bigaddrspacetest
def
test_product_overflow
(
self
):
with
self
.
assertRaises
(
OverflowError
):
product
(
[
"a"
]
*
(
2
**
16
),
repeat
=
2
**
16
)
with
self
.
assertRaises
(
(
OverflowError
,
MemoryError
)
):
product
(
*
([
'ab'
]
*
2
**
5
),
repeat
=
2
**
25
)
@
support
.
impl_detail
(
"tuple reuse is specific to CPython"
)
def
test_product_tuple_reuse
(
self
):
...
...
Modules/itertoolsmodule.c
View file @
b5e8e575
...
...
@@ -2022,15 +2022,14 @@ product_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
nargs
=
0
;
}
else
{
nargs
=
PyTuple_GET_SIZE
(
args
);
if
(
repeat
>
PY_SSIZE_T_MAX
/
sizeof
(
Py_ssize_t
)
||
nargs
>
PY_SSIZE_T_MAX
/
(
repeat
*
sizeof
(
Py_ssize_t
)))
{
if
((
size_t
)
nargs
>
PY_SSIZE_T_MAX
/
sizeof
(
Py_ssize_t
)
/
repeat
)
{
PyErr_SetString
(
PyExc_OverflowError
,
"repeat argument too large"
);
return
NULL
;
}
}
npools
=
nargs
*
repeat
;
indices
=
PyMem_
Malloc
(
npools
*
sizeof
(
Py_ssize_t
)
);
indices
=
PyMem_
New
(
Py_ssize_t
,
npools
);
if
(
indices
==
NULL
)
{
PyErr_NoMemory
();
goto
error
;
...
...
@@ -2368,11 +2367,7 @@ combinations_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
goto
error
;
}
if
(
r
>
PY_SSIZE_T_MAX
/
sizeof
(
Py_ssize_t
))
{
PyErr_SetString
(
PyExc_OverflowError
,
"r is too big"
);
goto
error
;
}
indices
=
PyMem_Malloc
(
r
*
sizeof
(
Py_ssize_t
));
indices
=
PyMem_New
(
Py_ssize_t
,
r
);
if
(
indices
==
NULL
)
{
PyErr_NoMemory
();
goto
error
;
...
...
@@ -2713,11 +2708,7 @@ cwr_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
goto
error
;
}
if
(
r
>
PY_SSIZE_T_MAX
/
sizeof
(
Py_ssize_t
))
{
PyErr_SetString
(
PyExc_OverflowError
,
"r is too big"
);
goto
error
;
}
indices
=
PyMem_Malloc
(
r
*
sizeof
(
Py_ssize_t
));
indices
=
PyMem_New
(
Py_ssize_t
,
r
);
if
(
indices
==
NULL
)
{
PyErr_NoMemory
();
goto
error
;
...
...
@@ -3058,13 +3049,8 @@ permutations_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
goto
error
;
}
if
(
n
>
PY_SSIZE_T_MAX
/
sizeof
(
Py_ssize_t
)
||
r
>
PY_SSIZE_T_MAX
/
sizeof
(
Py_ssize_t
))
{
PyErr_SetString
(
PyExc_OverflowError
,
"parameters too large"
);
goto
error
;
}
indices
=
PyMem_Malloc
(
n
*
sizeof
(
Py_ssize_t
));
cycles
=
PyMem_Malloc
(
r
*
sizeof
(
Py_ssize_t
));
indices
=
PyMem_New
(
Py_ssize_t
,
n
);
cycles
=
PyMem_New
(
Py_ssize_t
,
r
);
if
(
indices
==
NULL
||
cycles
==
NULL
)
{
PyErr_NoMemory
();
goto
error
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment