Hello community,

here is the log from the commit of package libgtop for openSUSE:Factory checked 
in at 2017-01-23 11:23:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libgtop (Old)
 and      /work/SRC/openSUSE:Factory/.libgtop.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libgtop"

Changes:
--------
--- /work/SRC/openSUSE:Factory/libgtop/libgtop.changes  2017-01-15 
11:06:50.693867179 +0100
+++ /work/SRC/openSUSE:Factory/.libgtop.new/libgtop.changes     2017-01-23 
11:23:31.063889905 +0100
@@ -1,0 +2,16 @@
+Thu Jan 19 17:29:25 UTC 2017 - [email protected]
+
+- Add libgtop-bsc1020294-cpu-buffer.patch: dynamically allocate
+  memory for buffer when reading /proc/cpuinfo (bsc#1020294
+  bgo#323354).
+
+-------------------------------------------------------------------
+Mon Jan 16 20:39:12 UTC 2017 - [email protected]
+
+- Update to version 2.34.2:
+  + Linux: fill last_processor member.
+  + Added more gettext options.
+  + Updated translations.
+- Add url to upstream developer page, silence rpmlint.
+
+-------------------------------------------------------------------

Old:
----
  libgtop-2.34.1.tar.xz

New:
----
  libgtop-2.34.2.tar.xz
  libgtop-bsc1020294-cpu-buffer.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libgtop.spec ++++++
--- /var/tmp/diff_new_pack.1kCnAD/_old  2017-01-23 11:23:31.475831421 +0100
+++ /var/tmp/diff_new_pack.1kCnAD/_new  2017-01-23 11:23:31.479830853 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package libgtop
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,14 +17,17 @@
 
 
 Name:           libgtop
-Version:        2.34.1
+Version:        2.34.2
 Release:        0
 %define soname 10
 Summary:        LibGTop Library
 License:        GPL-2.0+
 Group:          System/Libraries
+Url:            https://developer.gnome.org/libgtop/stable/
 Source:         
http://download.gnome.org/sources/libgtop/2.34/%{name}-%{version}.tar.xz
 Source99:       baselibs.conf
+# PATCH-FIX-UPSTREAM libgtop-bsc1020294-cpu-buffer.patch bsc#1020294 
bgo#323354 [email protected] -- dynamically allocate buffer when reading 
/proc/cpuinfo.
+Patch0:         libgtop-bsc1020294-cpu-buffer.patch
 BuildRequires:  fdupes
 BuildRequires:  glib2-devel
 BuildRequires:  gobject-introspection-devel
@@ -111,6 +114,7 @@
 %lang_package
 %prep
 %setup -q
+%patch0 -p1
 %if !0%{?is_opensuse}
 translation-update-upstream po libgtop
 # rpmlint note: libgtop has a separate translation for both Bengali and 
Bengali India

++++++ libgtop-2.34.1.tar.xz -> libgtop-2.34.2.tar.xz ++++++
++++ 2107 lines of diff (skipped)

++++++ libgtop-bsc1020294-cpu-buffer.patch ++++++
>From b22fddaaa5dc3d667f4b5168c7e95979cf8f7910 Mon Sep 17 00:00:00 2001
From: Mike Gorse <[email protected]>
Date: Wed, 18 Jan 2017 16:40:52 -0600
Subject: [PATCH] linux: Dynamically allocate the buffer to parse /proc/cpuinfo

On a server with many cores, /proc/cpuinfo might contain more than 64k of
data, so we weren't fully parsing it, meaning that we'd see fewer cores than
were present.

https://bugzilla.gnome.org/show_bug.cgi?id=323354
---
 sysdeps/linux/glibtop_private.c | 63 +++++++++++++++++++++++++++++++++++++++++
 sysdeps/linux/glibtop_private.h |  4 +++
 sysdeps/linux/sysinfo.c         |  6 ++--
 3 files changed, 71 insertions(+), 2 deletions(-)

diff --git a/sysdeps/linux/glibtop_private.c b/sysdeps/linux/glibtop_private.c
index 52c3782..8c50723 100644
--- a/sysdeps/linux/glibtop_private.c
+++ b/sysdeps/linux/glibtop_private.c
@@ -133,7 +133,70 @@ file_to_buffer(glibtop *server, char *buffer, size_t 
bufsiz, const char *filenam
        }
 }
 
+char *file_to_buffer_alloc(const char *format, ...)
+{
+       char path[4096];
+       int fd;
+       char *buffer = NULL;
+       size_t len = 0;
+       size_t bufsiz = 16384;
+       ssize_t nread = 0;
+       va_list pa;
+
+       va_start(pa, format);
+
+       /* C99 also provides vsnprintf */
+       g_vsnprintf(path, sizeof path, format, pa);
 
+       va_end(pa);
+
+       buffer = (char *)malloc(bufsiz);
+       if (!buffer)
+               return NULL;
+
+       buffer [0] = '\0';
+
+       if((fd = open (path, O_RDONLY)) < 0)
+               return NULL;
+
+       for (;;) {
+               nread = read (fd, buffer + len, bufsiz - len - 1);
+
+               if (G_UNLIKELY(nread < 0)) {
+                       if (errno == EINTR)
+                               continue;
+                       else
+                               break;
+               }
+
+               len += nread;
+
+               if (nread == 0)
+                       break;
+
+               if (len >= bufsiz - 1) {
+                       char *new;
+                       bufsiz *= 2;
+                       new = realloc (buffer, bufsiz);
+                       if (!new) {
+                               free (buffer);
+                       return NULL;
+                       }
+                       buffer = new;
+               }
+       }
+
+       close (fd);
+
+       if (nread < 0) {
+               free (buffer);
+               return NULL;
+       }
+
+       buffer [len] = '\0';
+
+       return buffer;
+}
 
 
 static unsigned long
diff --git a/sysdeps/linux/glibtop_private.h b/sysdeps/linux/glibtop_private.h
index 149832a..0ff2ea0 100644
--- a/sysdeps/linux/glibtop_private.h
+++ b/sysdeps/linux/glibtop_private.h
@@ -78,6 +78,10 @@ file_to_buffer(glibtop *server, char *buffer, size_t bufsiz, 
const char *filenam
 int
 try_file_to_buffer(char *buffer, size_t bufsiz, const char *format, ...) 
G_GNUC_PRINTF(3, 4);
 
+/* Returns an allocated buffer to be freed with free(), or NULL on error */
+char *
+file_to_buffer_alloc(const char *format, ...) G_GNUC_PRINTF(1, 2);
+
 
 /* some inline functions that wrap proc path
  * as fast as macros :)
diff --git a/sysdeps/linux/sysinfo.c b/sysdeps/linux/sysinfo.c
index bd80b0d..14bfd8b 100644
--- a/sysdeps/linux/sysinfo.c
+++ b/sysdeps/linux/sysinfo.c
@@ -36,12 +36,13 @@ static glibtop_sysinfo sysinfo = { .flags = 0 };
 static void
 init_sysinfo (glibtop *server)
 {
-       char buffer [65536];
+       char *buffer;
        gchar ** processors;
 
        if(G_LIKELY(sysinfo.flags)) return;
 
-       file_to_buffer(server, buffer, sizeof buffer, FILENAME);
+       buffer = file_to_buffer_alloc(FILENAME);
+       if (!buffer) return;
 
        /* cpuinfo records are seperated by a blank line */
        processors = g_strsplit(buffer, "\n\n", 0);
@@ -88,6 +89,7 @@ init_sysinfo (glibtop *server)
        }
 
        g_strfreev(processors);
+       g_free(buffer);
 
        sysinfo.flags = _glibtop_sysdeps_sysinfo;
 }
-- 
2.6.6


Reply via email to