From d689eeb3199bec19d95aa82ecb27f7b57bd93220 Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Mon, 4 Jun 2018 18:46:42 +0300 Subject: [PATCH] PY-30249: Check array size to prevent AOBE --- .../python/testing/pyTestParametrized/PyTestParamterized.kt | 2 +- python/testData/testCompletion/after_test_parametrized.txt | 4 ++++ python/testData/testCompletion/test_parametrized.py | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/python/src/com/jetbrains/python/testing/pyTestParametrized/PyTestParamterized.kt b/python/src/com/jetbrains/python/testing/pyTestParametrized/PyTestParamterized.kt index 4918c00834aa..acf589bcd518 100644 --- a/python/src/com/jetbrains/python/testing/pyTestParametrized/PyTestParamterized.kt +++ b/python/src/com/jetbrains/python/testing/pyTestParametrized/PyTestParamterized.kt @@ -61,7 +61,7 @@ private fun getParametersFromDecorator(decorator: PyDecorator, evalContext: Type parameterTypes[i] = PyUnionType.union(members.map { (it as? PyTupleType)?.getElementType(i) }) } } - is PyTupleType -> iteratedItemType.elementTypes.forEachIndexed { i, type -> parameterTypes[i] = type } + is PyTupleType -> iteratedItemType.elementTypes.forEachIndexed { i, type -> if (parameterTypes.size > i) parameterTypes[i] = type } !is PyCollectionType -> parameterTypes.fill(iteratedItemType) } diff --git a/python/testData/testCompletion/after_test_parametrized.txt b/python/testData/testCompletion/after_test_parametrized.txt index cd30b1a3e1fb..aa4c5f97130e 100644 --- a/python/testData/testCompletion/after_test_parametrized.txt +++ b/python/testData/testCompletion/after_test_parametrized.txt @@ -12,3 +12,7 @@ def test_returns_correct_result(test_input, expected, x, y): # False positive: x.bit_length() test_input.__len__() expected.bit_length() + +@pytest.mark.parametrize(('x', 'y'), [(1, 2, 3, 4)]) # Too many values in tuple, should be 2 +def test_wrong_number_of_parameters(x, y): + x.bit_length() diff --git a/python/testData/testCompletion/test_parametrized.py b/python/testData/testCompletion/test_parametrized.py index a81848a49966..c160eaafad2f 100644 --- a/python/testData/testCompletion/test_parametrized.py +++ b/python/testData/testCompletion/test_parametrized.py @@ -12,3 +12,7 @@ def test_returns_correct_result(test_input, expected, x, y): # False positive: x.bit_len test_input.len expected.bit_len + +@pytest.mark.parametrize(('x', 'y'), [(1, 2, 3, 4)]) # Too many values in tuple, should be 2 +def test_wrong_number_of_parameters(x, y): + x.bit_len