Blame SOURCES/hplip-do-not-crash-on-usb-failure.patch

b99885
diff -up hplip-3.15.9/io/hpmud/musb.c.hplip-usb-no-crash hplip-3.15.9/io/hpmud/musb.c
b99885
--- hplip-3.15.9/io/hpmud/musb.c.hplip-usb-no-crash	2016-06-10 12:51:45.981782728 +0200
b99885
+++ hplip-3.15.9/io/hpmud/musb.c	2016-06-10 13:07:57.691178754 +0200
b99885
@@ -691,7 +691,8 @@ static libusb_device *get_libusb_device(
b99885
     int numdevs = 0;        /* number of connected devices */
b99885
     int i, conf, iface, altset ;
b99885
 
b99885
-    libusb_init(&libusb_ctx);
b99885
+    i = libusb_init(&libusb_ctx);
b99885
+    if (i) goto bugout;
b99885
     numdevs = libusb_get_device_list(libusb_ctx, &libusb_dev_list);
b99885
     for (i=0; i< numdevs; i++)
b99885
     {
b99885
@@ -2022,7 +2023,7 @@ bugout:
b99885
 int __attribute__ ((visibility ("hidden"))) musb_probe_devices(char *lst, int lst_size, int *cnt)
b99885
 {
b99885
     libusb_context *ctx = NULL;
b99885
-    libusb_device **list; /*List of connected USB devices */
b99885
+    libusb_device **list = NULL; /*List of connected USB devices */
b99885
     libusb_device *dev = NULL; /* Current device */
b99885
     struct libusb_device_descriptor devdesc; /* Current device descriptor */
b99885
     struct libusb_config_descriptor *confptr = NULL; /* Pointer to current configuration */
b99885
@@ -2039,7 +2040,8 @@ int __attribute__ ((visibility ("hidden"
b99885
     char serial[128], mfg[128], sz[HPMUD_LINE_SIZE];
b99885
     int r, size=0;
b99885
 
b99885
-    libusb_init(&ctx;;
b99885
+    i = libusb_init(&ctx;;
b99885
+    if (i) goto bugout;
b99885
     numdevs = libusb_get_device_list(ctx, &list);
b99885
 
b99885
     if (numdevs <= 0)
b99885
@@ -2135,12 +2137,14 @@ int __attribute__ ((visibility ("hidden"
b99885
     }//end for loop
b99885
 
b99885
 bugout:
b99885
-    if (!hd)
b99885
+    if (hd)
b99885
         libusb_close(hd);
b99885
     if (confptr)
b99885
         libusb_free_config_descriptor(confptr);
b99885
-    libusb_free_device_list(list, 1);
b99885
-    libusb_exit(ctx);
b99885
+    if (list)
b99885
+        libusb_free_device_list(list, 1);
b99885
+    if (ctx)
b99885
+        libusb_exit(ctx);
b99885
 
b99885
     return size;
b99885
 }
b99885
@@ -2148,7 +2152,7 @@ bugout:
b99885
 enum HPMUD_RESULT hpmud_make_usb_uri(const char *busnum, const char *devnum, char *uri, int uri_size, int *bytes_read)
b99885
 {
b99885
     libusb_context *ctx = NULL;
b99885
-    libusb_device **list; /*List of connected USB devices */
b99885
+    libusb_device **list = NULL; /*List of connected USB devices */
b99885
     libusb_device *dev = NULL, *found_dev=NULL;
b99885
     libusb_device_handle *hd=NULL;
b99885
     struct libusb_device_descriptor devdesc; /* Current device descriptor */
b99885
@@ -2166,7 +2170,8 @@ enum HPMUD_RESULT hpmud_make_usb_uri(con
b99885
 
b99885
     *bytes_read=0;
b99885
 
b99885
-    libusb_init(&ctx;;
b99885
+    i = libusb_init(&ctx;;
b99885
+    if (i) goto bugout;
b99885
     numdevs = libusb_get_device_list(ctx, &list);
b99885
 
b99885
     if (numdevs <= 0)
b99885
@@ -2269,8 +2274,10 @@ bugout:
b99885
     if (hd != NULL)
b99885
         libusb_close(hd);
b99885
 
b99885
-    libusb_free_device_list(list, 1);
b99885
-    libusb_exit(ctx);
b99885
+    if (list)
b99885
+        libusb_free_device_list(list, 1);
b99885
+    if (ctx)
b99885
+        libusb_exit(ctx);
b99885
 
b99885
     return stat;
b99885
 }
b99885
@@ -2278,7 +2285,7 @@ bugout:
b99885
 enum HPMUD_RESULT hpmud_make_usb_serial_uri(const char *sn, char *uri, int uri_size, int *bytes_read)
b99885
 {
b99885
     libusb_context *ctx = NULL;
b99885
-    libusb_device **list; /*List of connected USB devices */
b99885
+    libusb_device **list = NULL; /*List of connected USB devices */
b99885
     libusb_device *dev = NULL, *found_dev=NULL;
b99885
 
b99885
     char model[128];
b99885
@@ -2289,7 +2296,8 @@ enum HPMUD_RESULT hpmud_make_usb_serial_
b99885
 
b99885
     *bytes_read=0;
b99885
 
b99885
-    libusb_init(&ctx;;
b99885
+    i = libusb_init(&ctx;;
b99885
+    if (i) goto bugout;
b99885
     numdevs = libusb_get_device_list(ctx, &list);
b99885
 
b99885
     if (numdevs <= 0)
b99885
@@ -2315,8 +2323,10 @@ enum HPMUD_RESULT hpmud_make_usb_serial_
b99885
     stat = HPMUD_R_OK;
b99885
 
b99885
 bugout:
b99885
-    libusb_free_device_list(list, 1);
b99885
-    libusb_exit(ctx);
b99885
+    if (list)
b99885
+        libusb_free_device_list(list, 1);
b99885
+    if (ctx)
b99885
+        libusb_exit(ctx);
b99885
 
b99885
     return stat;
b99885
 }