From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Sun, 16 Jun 2019 11:38:07 +0000 (-0700) Subject: Simplify negativity checks in math.comb and math.perm. (GH-13870) (#14125) X-Git-Tag: v3.8.0b2~119 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=599f7ecb70f1b9714c702322b235b4d8155205ae;p=python Simplify negativity checks in math.comb and math.perm. (GH-13870) (#14125) (cherry picked from commit 45e0411eee023b21acf1615e995d26058d66c0f1) Co-authored-by: Mark Dickinson --- diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index ed11476753..76d821c65b 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; }