From: Peter Bierma Date: Mon, 31 Mar 2025 17:30:29 +0000 (-0400) Subject: gh-131936: Strengthen check in `_suggestions._generate_suggestions` (#131945) X-Git-Tag: v3.14.0a7~122 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=511d3440a0bbb19731f4d96dde65dffbf85cdda5;p=thirdparty%2FPython%2Fcpython.git gh-131936: Strengthen check in `_suggestions._generate_suggestions` (#131945) --- diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index ac492782cb1a..6ae8cf5c9a51 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -4619,7 +4619,31 @@ class MiscTest(unittest.TestCase): @cpython_only def test_suggestions_extension(self): # Check that the C extension is available - import _suggestions # noqa: F401 + import _suggestions + + self.assertEqual( + _suggestions._generate_suggestions( + ["hello", "world"], + "hell" + ), + "hello" + ) + self.assertEqual( + _suggestions._generate_suggestions( + ["hovercraft"], + "eels" + ), + None + ) + + # gh-131936: _generate_suggestions() doesn't accept list subclasses + class MyList(list): + pass + + with self.assertRaises(TypeError): + _suggestions._generate_suggestions(MyList(), "") + + class TestColorizedTraceback(unittest.TestCase): diff --git a/Modules/_suggestions.c b/Modules/_suggestions.c index 80c7179c4c25..b8bc6db24772 100644 --- a/Modules/_suggestions.c +++ b/Modules/_suggestions.c @@ -21,7 +21,7 @@ _suggestions__generate_suggestions_impl(PyObject *module, /*[clinic end generated code: output=79be7b653ae5e7ca input=ba2a8dddc654e33a]*/ { // Check if dir is a list - if (!PyList_Check(candidates)) { + if (!PyList_CheckExact(candidates)) { PyErr_SetString(PyExc_TypeError, "candidates must be a list"); return NULL; }