diff options
author | Mark Dickinson <dickinsm@gmail.com> | 2019-06-16 10:06:06 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-16 10:06:06 (GMT) |
commit | 45e0411eee023b21acf1615e995d26058d66c0f1 (patch) | |
tree | 5a32efca086490c238a63c80148e7e819adbb3d1 /Modules/mathmodule.c | |
parent | 552951563cd5968d25e95306362e41f07d661a88 (diff) | |
download | cpython-45e0411eee023b21acf1615e995d26058d66c0f1.zip cpython-45e0411eee023b21acf1615e995d26058d66c0f1.tar.gz cpython-45e0411eee023b21acf1615e995d26058d66c0f1.tar.bz2 |
Simplify negativity checks in math.comb and math.perm. (GH-13870)
Diffstat (limited to 'Modules/mathmodule.c')
-rw-r--r-- | Modules/mathmodule.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index ed11476..76d821c 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -3056,6 +3056,12 @@ math_perm_impl(PyObject *module, PyObject *n, PyObject *k) "n must be a non-negative integer"); goto error; } + if (Py_SIZE(k) < 0) { + PyErr_SetString(PyExc_ValueError, + "k must be a non-negative integer"); + goto error; + } + cmp = PyObject_RichCompareBool(n, k, Py_LT); if (cmp != 0) { if (cmp > 0) { @@ -3072,11 +3078,8 @@ math_perm_impl(PyObject *module, PyObject *n, PyObject *k) LLONG_MAX); goto error; } - else if (overflow < 0 || factors < 0) { - if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ValueError, - "k must be a non-negative integer"); - } + else if (factors == -1) { + /* k is nonnegative, so a return value of -1 can only indicate error */ goto error; } @@ -3176,6 +3179,12 @@ math_comb_impl(PyObject *module, PyObject *n, PyObject *k) "n must be a non-negative integer"); goto error; } + if (Py_SIZE(k) < 0) { + PyErr_SetString(PyExc_ValueError, + "k must be a non-negative integer"); + goto error; + } + /* k = min(k, n - k) */ temp = PyNumber_Subtract(n, k); if (temp == NULL) { @@ -3204,11 +3213,8 @@ math_comb_impl(PyObject *module, PyObject *n, PyObject *k) LLONG_MAX); goto error; } - else if (overflow < 0 || factors < 0) { - if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ValueError, - "k must be a non-negative integer"); - } + if (factors == -1) { + /* k is nonnegative, so a return value of -1 can only indicate error */ goto error; } |