[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