Blame SOURCES/0041-osutils-don-t-segfault-on-empty-files.patch

21ef37
From a4d32450c3565f5dba9e027283ea3dd40a21138e Mon Sep 17 00:00:00 2001
21ef37
From: Denis 'GNUtoo' Carikli <GNUtoo@no-log.org>
21ef37
Date: Mon, 9 Jan 2017 21:50:19 +0100
21ef37
Subject: [PATCH 41/43] osutils: don't segfault on empty files.
21ef37
21ef37
In the "string operating_system()" method, the GNU/Linux
21ef37
distribution is detected by trying to open various files
21ef37
like /etc/lsb_release.
21ef37
21ef37
Without that patch, If one of such file is present and empty,
21ef37
lshw -dump will produce a segmentation fault.
21ef37
21ef37
On the Parabola GNU/Linux distribution (An arch derivative),
21ef37
/etc/arch-release is empty.
21ef37
21ef37
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@no-log.org>
21ef37
---
21ef37
 src/core/osutils.cc | 42 +++++++++++++++++++++---------------------
21ef37
 1 file changed, 21 insertions(+), 21 deletions(-)
21ef37
21ef37
diff --git a/src/core/osutils.cc b/src/core/osutils.cc
21ef37
index cc03dc4..e93b79e 100644
21ef37
--- a/src/core/osutils.cc
21ef37
+++ b/src/core/osutils.cc
21ef37
@@ -773,47 +773,47 @@ string operating_system()
21ef37
   struct utsname u;
21ef37
   string os = "";
21ef37
 
21ef37
-  if(loadfile("/etc/lsb-release", osinfo))
21ef37
+  if(loadfile("/etc/lsb-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/lsb_release", osinfo))
21ef37
+  else if(loadfile("/etc/lsb_release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/system-release", osinfo))
21ef37
+  else if(loadfile("/etc/system-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/release", osinfo))
21ef37
+  else if(loadfile("/etc/release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/arch-release", osinfo))
21ef37
+  else if(loadfile("/etc/arch-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/arklinux-release", osinfo))
21ef37
+  else if(loadfile("/etc/arklinux-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/aurox-release", osinfo))
21ef37
+  else if(loadfile("/etc/aurox-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/conectiva-release", osinfo))
21ef37
+  else if(loadfile("/etc/conectiva-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/debian_version", osinfo))
21ef37
+  else if(loadfile("/etc/debian_version", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/fedora-release", osinfo))
21ef37
+  else if(loadfile("/etc/fedora-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/gentoo-release", osinfo))
21ef37
+  else if(loadfile("/etc/gentoo-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/linuxppc-release", osinfo))
21ef37
+  else if(loadfile("/etc/linuxppc-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/mandrake-release", osinfo))
21ef37
+  else if(loadfile("/etc/mandrake-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/mandriva-release", osinfo))
21ef37
+  else if(loadfile("/etc/mandriva-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/novell-release", osinfo))
21ef37
+  else if(loadfile("/etc/novell-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/pld-release", osinfo))
21ef37
+  else if(loadfile("/etc/pld-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/redhat-release", osinfo))
21ef37
+  else if(loadfile("/etc/redhat-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/slackware-version", osinfo))
21ef37
+  else if(loadfile("/etc/slackware-version", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/sun-release", osinfo))
21ef37
+  else if(loadfile("/etc/sun-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/SuSE-release", osinfo))
21ef37
+  else if(loadfile("/etc/SuSE-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
-  else if(loadfile("/etc/yellowdog-release", osinfo))
21ef37
+  else if(loadfile("/etc/yellowdog-release", osinfo) && (osinfo.size() > 0))
21ef37
     os = osinfo[0];
21ef37
 
21ef37
   if(uname(&u) != 0) return "";
21ef37
-- 
21ef37
2.10.2
21ef37