[packages/syslog-ng] - fix breakegae on 32 bit archs

baggins baggins at pld-linux.org
Sat May 9 11:56:27 CEST 2020


commit cfdb710fe427336170cffe803614e04923229eab
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Sat May 9 11:46:27 2020 +0200

    - fix breakegae on 32 bit archs
    
    logsource.c: substracting signed from unsigned will result in an unsigned
        value that cannot be smaller than 0
    
    test_window_size_counter.c: this test should have NEVER worked,
        window_size_counter always strips highest bit from the value.
        It passed by accident on 64 bit, because the cast was narrowing
        type from long (64 bit) to int (32 bit) (both long and int are 32
        bit on 32 bit archs).
    
    On a side note, the whole syslog-ng code is super brittle. It's mixing
    signed and unsigned in arithmetics, mixing differently sized integers
    all over the place. It's just an accident waiting to happen.

 32bit.patch    | 26 ++++++++++++++++++++++++++
 syslog-ng.spec |  2 ++
 2 files changed, 28 insertions(+)
---
diff --git a/syslog-ng.spec b/syslog-ng.spec
index f5d7687..7f0677f 100644
--- a/syslog-ng.spec
+++ b/syslog-ng.spec
@@ -62,6 +62,7 @@ Patch3:		%{name}-systemd.patch
 Patch4:		man-paths.patch
 Patch5:		%{name}-link.patch
 Patch6:		no_shared_ivykis.patch
+Patch7:		32bit.patch
 URL:		https://syslog-ng.org/
 BuildRequires:	autoconf >= 2.59
 BuildRequires:	automake
@@ -363,6 +364,7 @@ rmdir lib/ivykis
 %patch4 -p1
 %patch5 -p1
 %patch6 -p1
+%patch7 -p1
 cp -p %{SOURCE4} doc
 cp -p %{SOURCE5} contrib/syslog-ng.conf.simple
 
diff --git a/32bit.patch b/32bit.patch
new file mode 100644
index 0000000..359ba3e
--- /dev/null
+++ b/32bit.patch
@@ -0,0 +1,26 @@
+diff -ur syslog-ng-syslog-ng-3.27.1/lib/logsource.c syslog-ng-syslog-ng-3.27.1.32bit/lib/logsource.c
+--- syslog-ng-syslog-ng-3.27.1/lib/logsource.c	2020-04-30 16:18:56.000000000 +0200
++++ syslog-ng-syslog-ng-3.27.1.32bit/lib/logsource.c	2020-05-09 11:36:21.539723717 +0200
+@@ -57,7 +58,7 @@
+       return window_size_increment;
+     }
+ 
+-  guint32 remaining_window_size_increment = MAX(window_size_increment - old, 0);
++  guint32 remaining_window_size_increment = MAX((gssize)window_size_increment - old, 0);
+   guint32 reclaimed = window_size_increment - remaining_window_size_increment;
+   atomic_gssize_add(&self->pending_reclaimed, reclaimed);
+ 
+diff -ur syslog-ng-syslog-ng-3.27.1/lib/tests/test_window_size_counter.c syslog-ng-syslog-ng-3.27.1.32bit/lib/tests/test_window_size_counter.c
+--- syslog-ng-syslog-ng-3.27.1/lib/tests/test_window_size_counter.c	2020-04-30 16:18:56.000000000 +0200
++++ syslog-ng-syslog-ng-3.27.1.32bit/lib/tests/test_window_size_counter.c	2020-05-09 11:43:12.103043082 +0200
+@@ -59,8 +59,8 @@
+   WindowSizeCounter c;
+   gboolean suspended = FALSE;
+   window_size_counter_set(&c, -1);
+-  gint v = (gint)window_size_counter_get(&c, &suspended);
+-  cr_assert_eq(v, -1);
++  gssize v = (gssize)window_size_counter_get(&c, &suspended);
++  cr_assert_eq(v, G_MAXLONG);
+ }
+ 
+ Test(test_window_size_counter, suspend_resume_multiple_times)
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/syslog-ng.git/commitdiff/cfdb710fe427336170cffe803614e04923229eab



More information about the pld-cvs-commit mailing list