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).
This commit is contained in:
Uwe Hermann 2016-05-27 14:29:52 +02:00
parent 43376f3324
commit 39fcfdc9da
1 changed files with 13 additions and 2 deletions

View File

@ -378,18 +378,29 @@ SR_PRIV GSList *std_dev_list(const struct sr_dev_driver *di)
* } * }
* @endcode * @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). * @param devices List of newly discovered devices (struct sr_dev_inst).
* *
* @return The @p devices list. * @return The @p devices list.
*/ */
SR_PRIV GSList *std_scan_complete(struct sr_dev_driver *di, GSList *devices) 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; 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) { for (l = devices; l; l = l->next) {
struct sr_dev_inst *sdi = l->data; struct sr_dev_inst *sdi = l->data;
if (!sdi) {
sr_err("Invalid driver instance, cannot complete scan.");
return NULL;
}
sdi->driver = di; sdi->driver = di;
} }