From: Uwe Hermann Date: Fri, 27 May 2016 12:29:52 +0000 (+0200) Subject: std_scan_complete(): Catch some errors to avoid segfaults. X-Git-Tag: libsigrok-0.5.0~366 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=39fcfdc9dae5311617f0e72b0a7333a199620190;p=libsigrok.git std_scan_complete(): Catch some errors to avoid segfaults. Check some variables for NULL before dereference to avoid segfaults due to buggy drivers (and show error messages so these issues are noticed early). --- diff --git a/src/std.c b/src/std.c index 4af3c681..fa668a7c 100644 --- 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; }