]> sigrok.org Git - libsigrok.git/commitdiff
std_scan_complete(): Catch some errors to avoid segfaults.
authorUwe Hermann <redacted>
Fri, 27 May 2016 12:29:52 +0000 (14:29 +0200)
committerUwe Hermann <redacted>
Fri, 27 May 2016 12:45:26 +0000 (14:45 +0200)
Check some variables for NULL before dereference to avoid segfaults due
to buggy drivers (and show error messages so these issues are noticed early).

src/std.c

index 4af3c6816266aa91ed097957f1583614c888a7a3..fa668a7c8eba8efc552dbdf28610641d9f440df9 100644 (file)
--- a/src/std.c
+++ b/src/std.c
@@ -378,18 +378,29 @@ SR_PRIV GSList *std_dev_list(const struct sr_dev_driver *di)
  * }
  * @endcode
  *
- * @param di The driver instance to use.
+ * @param di The driver instance to use. Must not be NULL.
  * @param devices List of newly discovered devices (struct sr_dev_inst).
  *
  * @return The @p devices list.
  */
 SR_PRIV GSList *std_scan_complete(struct sr_dev_driver *di, GSList *devices)
 {
-       struct drv_context *drvc = di->context;
+       struct drv_context *drvc;
        GSList *l;
 
+       if (!di) {
+               sr_err("Invalid driver instance (di), cannot complete scan.");
+               return NULL;
+       }
+
+       drvc = di->context;
+
        for (l = devices; l; l = l->next) {
                struct sr_dev_inst *sdi = l->data;
+               if (!sdi) {
+                       sr_err("Invalid driver instance, cannot complete scan.");
+                       return NULL;
+               }
                sdi->driver = di;
        }