File libcdio-0.94-leak-16.patch of Package libcdio

Partial patch.
From 213bc176b9be84ac61d52fb86cee33e8f14b80d7 Mon Sep 17 00:00:00 2001
From: "R. Bernstein" <rocky@gnu.org>
Date: Fri, 8 Dec 2017 21:21:21 -0500
Subject: [PATCH 16/20] DRY code. More leak removal.

---
 lib/driver/FreeBSD/freebsd.c | 13 +++++--------
 lib/driver/gnu_linux.c       | 19 ++++++++++---------
 lib/driver/netbsd.c          | 13 +++++++++----
 3 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/lib/driver/gnu_linux.c b/lib/driver/gnu_linux.c
index fc339e1a..e7967397 100644
--- a/lib/driver/gnu_linux.c
+++ b/lib/driver/gnu_linux.c
@@ -1775,8 +1775,7 @@ cdio_open_am_linux (const char *psz_orig_source, const char *access_mode)
   if (NULL == psz_orig_source) {
     psz_source=cdio_get_default_device_linux();
     if (NULL == psz_source) {
-      free(_data);
-      return NULL;
+      goto err_exit;
     }
 
     set_arg_linux(_data, "source", psz_source);
@@ -1789,13 +1788,14 @@ cdio_open_am_linux (const char *psz_orig_source, const char *access_mode)
 #if 0
       cdio_info ("source %s is not a device", psz_orig_source);
 #endif
-      free(_data);
-      return NULL;
+      goto err_exit;
     }
   }
 
   ret = cdio_new ((void *)_data, &_funcs);
-  if (ret == NULL) return NULL;
+  if (ret == NULL) {
+    goto err_exit;
+  }
 
   ret->driver_id = DRIVER_LINUX;
 
@@ -1809,11 +1809,12 @@ cdio_open_am_linux (const char *psz_orig_source, const char *access_mode)
   if (cdio_generic_init(_data, open_access_mode)) {
     set_scsi_tuple_linux(_data);
     return ret;
-  } else {
-    cdio_generic_free (_data);
-    free(ret);
-    return NULL;
   }
+  free(ret);
+
+ err_exit:
+    cdio_generic_free(_data);
+    return NULL;
 
 #else
   return NULL;
-- 
2.17.0

openSUSE Build Service is sponsored by