mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Issue #29327: Fixed a crash when pass the iterable keyword argument to sorted().
This commit is contained in:
commit
299dc239fe
3 changed files with 15 additions and 1 deletions
|
@ -1627,6 +1627,16 @@ class TestSorted(unittest.TestCase):
|
||||||
self.assertEqual(data, sorted(copy, reverse=1))
|
self.assertEqual(data, sorted(copy, reverse=1))
|
||||||
self.assertNotEqual(data, copy)
|
self.assertNotEqual(data, copy)
|
||||||
|
|
||||||
|
def test_bad_arguments(self):
|
||||||
|
# Issue #29327: The first argument is positional-only.
|
||||||
|
sorted([])
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
sorted(iterable=[])
|
||||||
|
# Other arguments are keyword-only
|
||||||
|
sorted([], key=None)
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
sorted([], None)
|
||||||
|
|
||||||
def test_inputtypes(self):
|
def test_inputtypes(self):
|
||||||
s = 'abracadabra'
|
s = 'abracadabra'
|
||||||
types = [list, tuple, str]
|
types = [list, tuple, str]
|
||||||
|
|
|
@ -10,6 +10,9 @@ What's New in Python 3.7.0 alpha 1?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #29327: Fixed a crash when pass the iterable keyword argument to
|
||||||
|
sorted().
|
||||||
|
|
||||||
- Issue #29034: Fix memory leak and use-after-free in os module (path_converter).
|
- Issue #29034: Fix memory leak and use-after-free in os module (path_converter).
|
||||||
|
|
||||||
- Issue #29159: Fix regression in bytes(x) when x.__index__() raises Exception.
|
- Issue #29159: Fix regression in bytes(x) when x.__index__() raises Exception.
|
||||||
|
|
|
@ -2128,7 +2128,7 @@ builtin_sorted(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwna
|
||||||
{
|
{
|
||||||
PyObject *newlist, *v, *seq, *keyfunc=NULL;
|
PyObject *newlist, *v, *seq, *keyfunc=NULL;
|
||||||
PyObject *callable;
|
PyObject *callable;
|
||||||
static const char * const kwlist[] = {"iterable", "key", "reverse", 0};
|
static const char * const kwlist[] = {"", "key", "reverse", 0};
|
||||||
/* args 1-3 should match listsort in Objects/listobject.c */
|
/* args 1-3 should match listsort in Objects/listobject.c */
|
||||||
static _PyArg_Parser parser = {"O|Oi:sorted", kwlist, 0};
|
static _PyArg_Parser parser = {"O|Oi:sorted", kwlist, 0};
|
||||||
int reverse;
|
int reverse;
|
||||||
|
@ -2147,6 +2147,7 @@ builtin_sorted(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwna
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert(nargs >= 1);
|
||||||
v = _PyObject_FastCallKeywords(callable, args + 1, nargs - 1, kwnames);
|
v = _PyObject_FastCallKeywords(callable, args + 1, nargs - 1, kwnames);
|
||||||
Py_DECREF(callable);
|
Py_DECREF(callable);
|
||||||
if (v == NULL) {
|
if (v == NULL) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue