From 2f1c76bf82619e0809a41a1df4fe0e26c6315270 Mon Sep 17 00:00:00 2001
From: Robin Krahl <robin.krahl@ireas.org>
Date: Mon, 6 Jan 2020 13:16:00 +0100
Subject: device: Check for nullptr in Device::enumerate

While the fields of the hid_device_info struct should not be null, it is
better to perform an explicit check before trying to construct strings
from them.
---
 device.cc | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/device.cc b/device.cc
index bc42965..5f26d65 100644
--- a/device.cc
+++ b/device.cc
@@ -209,14 +209,16 @@ std::vector<DeviceInfo> Device::enumerate(){
   auto pInfo_ = pInfo;
   std::vector<DeviceInfo> res;
   while (pInfo != nullptr){
-    auto deviceModel = product_id_to_model(pInfo->product_id);
-    if (deviceModel.has_value()) {
-      std::string path(pInfo->path);
-      std::wstring serialNumberW(pInfo->serial_number);
-      std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
-      std::string serialNumber = converter.to_bytes(serialNumberW);
-      DeviceInfo info = { deviceModel.value(), path, serialNumber };
-      res.push_back(info);
+    if (pInfo->path != nullptr && pInfo->serial_number != nullptr) {
+      auto deviceModel = product_id_to_model(pInfo->product_id);
+      if (deviceModel.has_value()) {
+        std::string path(pInfo->path);
+        std::wstring serialNumberW(pInfo->serial_number);
+        std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
+        std::string serialNumber = converter.to_bytes(serialNumberW);
+        DeviceInfo info = { deviceModel.value(), path, serialNumber };
+        res.push_back(info);
+      }
     }
     pInfo = pInfo->next;
   }
-- 
cgit v1.2.3