bindings: python: fix uninitialized default_vals being passed to gpiod_LineBulk_request()
authorKent Gibson <warthog618@gmail.com>
Mon, 15 Feb 2021 14:39:19 +0000 (15:39 +0100)
committerBartosz Golaszewski <bgolaszewski@baylibre.com>
Mon, 15 Feb 2021 14:39:19 +0000 (15:39 +0100)
If "default_vals" is not provided in the kwds then default_vals are
passed uninitialized to gpiod_line_request_bulk(), so rename the
existing default_vals to vals and introduce a new default_vals that
points to vals, or NULL if no defaults have been passed.

Fixes: 96c524c4951c (bindings: implement python bindings)
Reported-by: Pedro Botella <pbotella@gmail.com>
Signed-off-by: Kent Gibson <warthog618@gmail.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
bindings/python/gpiodmodule.c

index a6a336ec94c18ef0af0b98962ae31c83c57ac4ac..02514cc89c5d5512ac734826b23f77744cd1dadb 100644 (file)
@@ -1310,9 +1310,10 @@ static PyObject *gpiod_LineBulk_request(gpiod_LineBulkObject *self,
                                  NULL };
 
        int rv, type = gpiod_LINE_REQ_DIR_AS_IS, flags = 0,
-           default_vals[LINE_REQUEST_MAX_LINES], val;
+           vals[LINE_REQUEST_MAX_LINES], val;
        PyObject *def_vals_obj = NULL, *iter, *next;
        struct gpiod_line_request_config conf;
+       const int *default_vals = NULL;
        struct gpiod_line_bulk *bulk;
        Py_ssize_t num_def_vals;
        char *consumer = NULL;
@@ -1334,7 +1335,7 @@ static PyObject *gpiod_LineBulk_request(gpiod_LineBulkObject *self,
        gpiod_MakeRequestConfig(&conf, consumer, type, flags);
 
        if (def_vals_obj) {
-               memset(default_vals, 0, sizeof(default_vals));
+               memset(vals, 0, sizeof(vals));
 
                num_def_vals = PyObject_Size(def_vals_obj);
                if (num_def_vals != self->num_lines) {
@@ -1361,8 +1362,9 @@ static PyObject *gpiod_LineBulk_request(gpiod_LineBulkObject *self,
                                return NULL;
                        }
 
-                       default_vals[i] = !!val;
+                       vals[i] = !!val;
                }
+               default_vals = vals;
        }
 
        bulk = gpiod_LineBulkObjToCLineBulk(self);