summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_bisect.py6
-rw-r--r--Misc/NEWS.d/next/Library/2022-05-16-14-35-39.gh-issue-92839.owSMyo.rst1
-rw-r--r--Modules/_bisectmodule.c4
3 files changed, 9 insertions, 2 deletions
diff --git a/Lib/test/test_bisect.py b/Lib/test/test_bisect.py
index 20f8b9d..ba10822 100644
--- a/Lib/test/test_bisect.py
+++ b/Lib/test/test_bisect.py
@@ -257,6 +257,12 @@ class TestBisect:
target
)
+ def test_insort_keynotNone(self):
+ x = []
+ y = {"a": 2, "b": 1}
+ for f in (self.module.insort_left, self.module.insort_right):
+ self.assertRaises(TypeError, f, x, y, key = "b")
+
class TestBisectPython(TestBisect, unittest.TestCase):
module = py_bisect
diff --git a/Misc/NEWS.d/next/Library/2022-05-16-14-35-39.gh-issue-92839.owSMyo.rst b/Misc/NEWS.d/next/Library/2022-05-16-14-35-39.gh-issue-92839.owSMyo.rst
new file mode 100644
index 0000000..b425bd9
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-05-16-14-35-39.gh-issue-92839.owSMyo.rst
@@ -0,0 +1 @@
+Fixed crash resulting from calling bisect.insort() or bisect.insort_left() with the key argument not equal to None.
diff --git a/Modules/_bisectmodule.c b/Modules/_bisectmodule.c
index 19e9cd2..0caa92b 100644
--- a/Modules/_bisectmodule.c
+++ b/Modules/_bisectmodule.c
@@ -128,7 +128,7 @@ _bisect_insort_right_impl(PyObject *module, PyObject *a, PyObject *x,
index = internal_bisect_right(a, x, lo, hi, key);
} else {
key_x = PyObject_CallOneArg(key, x);
- if (x == NULL) {
+ if (key_x == NULL) {
return NULL;
}
index = internal_bisect_right(a, key_x, lo, hi, key);
@@ -256,7 +256,7 @@ _bisect_insort_left_impl(PyObject *module, PyObject *a, PyObject *x,
index = internal_bisect_left(a, x, lo, hi, key);
} else {
key_x = PyObject_CallOneArg(key, x);
- if (x == NULL) {
+ if (key_x == NULL) {
return NULL;
}
index = internal_bisect_left(a, key_x, lo, hi, key);