]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
pyglue: generate_random_[machine]_password: reject negative numbers
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Tue, 21 Jun 2022 23:12:30 +0000 (11:12 +1200)
committerAndreas Schneider <asn@cryptomilk.org>
Fri, 26 Aug 2022 07:59:32 +0000 (07:59 +0000)
Other range errors (e.g. min > max) are caught in the wrapped
functions which returns EINVAL, so we don't recapitulate that logic
(see next commit though).

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn@samba.org>
python/pyglue.c

index 969b35145de715f76672357a80f558535c89d108..dee3c296e034323fbcdcdfd580c413de1ae0e593 100644 (file)
@@ -57,8 +57,20 @@ static PyObject *py_generate_random_password(PyObject *self, PyObject *args)
        int min, max;
        PyObject *ret;
        char *retstr;
-       if (!PyArg_ParseTuple(args, "ii", &min, &max))
+       if (!PyArg_ParseTuple(args, "ii", &min, &max)) {
                return NULL;
+       }
+       if (max < 0 || min < 0) {
+               /*
+                * The real range checks happen in generate_random_password().
+                * Here we are just checking the values won't overflow into
+                * numbers when cast to size_t.
+                */
+               PyErr_Format(PyExc_ValueError,
+                            "invalid range: %d - %d",
+                            min, max);
+               return NULL;
+       }
 
        retstr = generate_random_password(NULL, min, max);
        if (retstr == NULL) {
@@ -74,8 +86,21 @@ static PyObject *py_generate_random_machine_password(PyObject *self, PyObject *a
        int min, max;
        PyObject *ret;
        char *retstr;
-       if (!PyArg_ParseTuple(args, "ii", &min, &max))
+       if (!PyArg_ParseTuple(args, "ii", &min, &max)) {
                return NULL;
+       }
+       if (max < 0 || min < 0) {
+               /*
+                * The real range checks happen in
+                * generate_random_machine_password().
+                * Here we are just checking the values won't overflow into
+                * numbers when cast to size_t.
+                */
+               PyErr_Format(PyExc_ValueError,
+                            "invalid range: %d - %d",
+                            min, max);
+               return NULL;
+       }
 
        retstr = generate_random_machine_password(NULL, min, max);
        if (retstr == NULL) {