From dc01c717edbe89c373412e12a298ca2655255c71 Mon Sep 17 00:00:00 2001 From: Mario Limonciello Date: Wed, 16 Oct 2019 14:10:20 -0500 Subject: [PATCH] trivial: colorhug: fix a crash that occurs when flashing sometimes If calling `ch_strerror` with some values returns `NULL` which makes the `GError` not get populated. ``` 0 0x00007f252d64d3bd in fu_colorhug_device_attach (device=0x560d7b5c4520 [FuColorhugDevice], error=0x7ffc57a51040) at ../plugins/colorhug/fu-colorhug-device.c:200 1 0x0000560d7a398279 in fu_device_attach (self=0x560d7b5c4520 [FuColorhugDevice], error=0x7ffc57a51040) at ../src/fu-device.c:1988 2 0x0000560d7a3a4b6c in fu_plugin_device_attach (self=0x560d7b57e160 [FuPlugin], device=0x560d7b5c4520 [FuColorhugDevice], error=0x7ffc57a51040) at ../src/fu-plugin.c:856 3 0x0000560d7a3a553f in fu_plugin_runner_device_generic (self=0x560d7b57e160 [FuPlugin], device=0x560d7b5c4520 [FuColorhugDevice], symbol_name=0x560d7a3d4258 "fu_plugin_update_attach", device_func=0x560d7a3a4ac1 , error=0x7ffc57a51040) at ../src/fu-plugin.c:1049 4 0x0000560d7a3a618d in fu_plugin_runner_update_attach (self=0x560d7b57e160 [FuPlugin], device=0x560d7b5c4520 [FuColorhugDevice], error=0x7ffc57a51040) at ../src/fu-plugin.c:1333 5 0x0000560d7a3bcc33 in fu_engine_update (self=0x560d7b4b9830 [FuEngine], device_id=0x560d7b64f200 "d45c9d222f7eeb3987c6a7674478bc6aec127b3f", blob_fw2=0x560d7b62c0d0, flags=FWUPD_INSTALL_FLAG_NONE, error=0x7ffc57a51150) at ../src/fu-engine.c:2001 (gdb) print error_local $1 = (GError_autoptr) 0x0 ``` --- plugins/colorhug/fu-colorhug-device.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/colorhug/fu-colorhug-device.c b/plugins/colorhug/fu-colorhug-device.c index a91cd01b2..792d36b19 100644 --- a/plugins/colorhug/fu-colorhug-device.c +++ b/plugins/colorhug/fu-colorhug-device.c @@ -137,10 +137,13 @@ fu_colorhug_device_msg (FuColorhugDevice *self, guint8 cmd, /* check error code */ if (buf[0] != CH_ERROR_NONE) { + const gchar *msg = ch_strerror (buf[0]); + if (msg == NULL) + msg = "unknown error"; g_set_error_literal (error, FWUPD_ERROR, FWUPD_ERROR_INTERNAL, - ch_strerror (buf[0])); + msg); return FALSE; }