fix crash when user has sieve script that includes two missing scripts (RHEL-52541)
Resolves: RHEL-52541
This commit is contained in:
parent
90dc9d2d3e
commit
d1dc898d5a
48
dovecot-2.3-ph_optglob.patch
Normal file
48
dovecot-2.3-ph_optglob.patch
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
diff -up dovecot-2.3.21/dovecot-pigeonhole/src/lib-sieve/plugins/include/cmd-include.c.ph_optglob dovecot-2.3.21/dovecot-pigeonhole/src/lib-sieve/plugins/include/cmd-include.c
|
||||||
|
--- dovecot-2.3.21/dovecot-pigeonhole/src/lib-sieve/plugins/include/cmd-include.c.ph_optglob 2024-06-04 09:11:28.514189662 +0200
|
||||||
|
+++ dovecot-2.3.21/dovecot-pigeonhole/src/lib-sieve/plugins/include/cmd-include.c 2024-06-04 09:18:23.219809778 +0200
|
||||||
|
@@ -368,11 +368,13 @@ static bool opc_include_dump
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
sieve_code_descend(denv);
|
||||||
|
- sieve_code_dumpf(denv, "script: `%s' from %s %s%s[ID: %d, BLOCK: %d]",
|
||||||
|
+ sieve_code_dumpf(denv, "script: `%s' from %s %s%s%s[ID: %d, BLOCK: %d]",
|
||||||
|
sieve_script_name(included->script), sieve_script_location(included->script),
|
||||||
|
((flags & EXT_INCLUDE_FLAG_ONCE) != 0 ? "(once) " : ""),
|
||||||
|
((flags & EXT_INCLUDE_FLAG_OPTIONAL) != 0 ? "(optional) " : ""),
|
||||||
|
- include_id, sieve_binary_block_get_id(included->block));
|
||||||
|
+ (included->block == NULL ? "(missing) " : ""),
|
||||||
|
+ include_id,
|
||||||
|
+ (included->block == NULL ? -1 : sieve_binary_block_get_id(included->block)));
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
diff -up dovecot-2.3.21/dovecot-pigeonhole/src/lib-sieve/plugins/include/ext-include-common.c.ph_optglob dovecot-2.3.21/dovecot-pigeonhole/src/lib-sieve/plugins/include/ext-include-common.c
|
||||||
|
--- dovecot-2.3.21/dovecot-pigeonhole/src/lib-sieve/plugins/include/ext-include-common.c.ph_optglob 2023-09-14 15:18:26.000000000 +0200
|
||||||
|
+++ dovecot-2.3.21/dovecot-pigeonhole/src/lib-sieve/plugins/include/ext-include-common.c 2024-06-04 09:10:45.187823805 +0200
|
||||||
|
@@ -693,6 +693,25 @@ int ext_include_execute_include(const st
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx = ext_include_get_interpreter_context(this_ext, renv->interp);
|
||||||
|
+ if (included->block == NULL) {
|
||||||
|
+ if ((flags & EXT_INCLUDE_FLAG_OPTIONAL) != 0) {
|
||||||
|
+ sieve_runtime_trace(
|
||||||
|
+ renv, SIEVE_TRLVL_NONE,
|
||||||
|
+ "include: skipped include for script '%s' "
|
||||||
|
+ "[inc id: %d, block: NULL]; optional and unavailable",
|
||||||
|
+ sieve_script_name(included->script),
|
||||||
|
+ include_id);
|
||||||
|
+ return result;
|
||||||
|
+ } else {
|
||||||
|
+ sieve_runtime_trace(
|
||||||
|
+ renv, SIEVE_TRLVL_NONE,
|
||||||
|
+ "include: unavailable script '%s' "
|
||||||
|
+ "[inc id: %d, block: NULL]",
|
||||||
|
+ sieve_script_name(included->script),
|
||||||
|
+ include_id);
|
||||||
|
+ return SIEVE_EXEC_BIN_CORRUPT;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
block_id = sieve_binary_block_get_id(included->block);
|
||||||
|
|
||||||
|
/* If :once modifier is specified, check for duplicate include */
|
12
dovecot-2.3-ph_scriptcmp.patch
Normal file
12
dovecot-2.3-ph_scriptcmp.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff -up dovecot-2.3.21/dovecot-pigeonhole/src/lib-sieve/storage/file/sieve-file-script.c.testfix4 dovecot-2.3.21/dovecot-pigeonhole/src/lib-sieve/storage/file/sieve-file-script.c
|
||||||
|
--- dovecot-2.3.21/dovecot-pigeonhole/src/lib-sieve/storage/file/sieve-file-script.c.testfix4 2024-06-03 13:35:24.408858593 +0200
|
||||||
|
+++ dovecot-2.3.21/dovecot-pigeonhole/src/lib-sieve/storage/file/sieve-file-script.c 2024-06-03 13:35:24.434858849 +0200
|
||||||
|
@@ -800,7 +800,7 @@ static bool sieve_file_script_equals
|
||||||
|
(struct sieve_file_script *)other;
|
||||||
|
|
||||||
|
return ( CMP_DEV_T(fscript->st.st_dev, fother->st.st_dev) &&
|
||||||
|
- fscript->st.st_ino == fother->st.st_ino );
|
||||||
|
+ fscript->st.st_ino == fother->st.st_ino && (fscript->st.st_ino != 0 || script->location != NULL && other->location != NULL && strcmp(script->location, other->location) == 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
22
dovecot-2.3.21-test-socket-path.patch
Normal file
22
dovecot-2.3.21-test-socket-path.patch
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
From 9a3e0d099044d3a7478c3a24ccb8990181767f7c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Duncan Bellamy <dunk@denkimushi.com>
|
||||||
|
Date: Sat, 6 Mar 2021 14:25:29 +0000
|
||||||
|
Subject: [PATCH] imap: Shorten test-imap-client-hibernate socket path length
|
||||||
|
|
||||||
|
---
|
||||||
|
src/imap/test-imap-client-hibernate.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/imap/test-imap-client-hibernate.c b/src/imap/test-imap-client-hibernate.c
|
||||||
|
index 9b90e1bd9a..c5392fa3fc 100644
|
||||||
|
--- a/src/imap/test-imap-client-hibernate.c
|
||||||
|
+++ b/src/imap/test-imap-client-hibernate.c
|
||||||
|
@@ -19,7 +19,7 @@
|
||||||
|
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
-#define TEMP_DIRNAME ".test-imap-client-hibernate"
|
||||||
|
+#define TEMP_DIRNAME ".test-ich"
|
||||||
|
|
||||||
|
#define EVILSTR "\t\r\n\001"
|
||||||
|
|
15
dovecot.spec
15
dovecot.spec
@ -6,7 +6,7 @@ Name: dovecot
|
|||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 2.3.21
|
Version: 2.3.21
|
||||||
%global prever %{nil}
|
%global prever %{nil}
|
||||||
Release: 12%{?dist}
|
Release: 13%{?dist}
|
||||||
#dovecot itself is MIT, a few sources are PD, pigeonhole is LGPLv2
|
#dovecot itself is MIT, a few sources are PD, pigeonhole is LGPLv2
|
||||||
License: MIT AND LGPL-2.1-only
|
License: MIT AND LGPL-2.1-only
|
||||||
|
|
||||||
@ -55,6 +55,13 @@ Patch23: dovecot-2.3.20-nolibotp.patch
|
|||||||
# adapted from 2.4 dovecot, issue #RHEL-33733
|
# adapted from 2.4 dovecot, issue #RHEL-33733
|
||||||
Patch24: dovecot-2.3.21-noengine.patch
|
Patch24: dovecot-2.3.21-noengine.patch
|
||||||
|
|
||||||
|
# sent upstream, issue #RHEL-52541
|
||||||
|
Patch25: dovecot-2.3-ph_optglob.patch
|
||||||
|
Patch26: dovecot-2.3-ph_scriptcmp.patch
|
||||||
|
|
||||||
|
# fix test failing due to too long path with all the mock path prefixes
|
||||||
|
Patch27: dovecot-2.3.21-test-socket-path.patch
|
||||||
|
|
||||||
BuildRequires: gcc, gcc-c++, openssl-devel, pam-devel, zlib-devel, bzip2-devel, libcap-devel
|
BuildRequires: gcc, gcc-c++, openssl-devel, pam-devel, zlib-devel, bzip2-devel, libcap-devel
|
||||||
BuildRequires: libtool, autoconf, automake, pkgconfig
|
BuildRequires: libtool, autoconf, automake, pkgconfig
|
||||||
BuildRequires: sqlite-devel
|
BuildRequires: sqlite-devel
|
||||||
@ -156,6 +163,9 @@ mv dovecot-2.3-pigeonhole-%{pigeonholever} dovecot-pigeonhole
|
|||||||
%patch -P 22 -p1 -b .c99
|
%patch -P 22 -p1 -b .c99
|
||||||
%patch -P 23 -p1 -b .nolibotp
|
%patch -P 23 -p1 -b .nolibotp
|
||||||
%patch -P 24 -p1 -b .noengine
|
%patch -P 24 -p1 -b .noengine
|
||||||
|
%patch -P 25 -p1 -b .ph_optglob
|
||||||
|
%patch -P 26 -p1 -b .ph_scriptcmp
|
||||||
|
%patch -P 27 -p1 -b .test-socket-path
|
||||||
cp run-test-valgrind.supp dovecot-pigeonhole/
|
cp run-test-valgrind.supp dovecot-pigeonhole/
|
||||||
# valgrind would fail with shell wrapper
|
# valgrind would fail with shell wrapper
|
||||||
echo "testsuite" >dovecot-pigeonhole/run-test-valgrind.exclude
|
echo "testsuite" >dovecot-pigeonhole/run-test-valgrind.exclude
|
||||||
@ -516,6 +526,9 @@ make check
|
|||||||
%{_libdir}/%{name}/dict/libdriver_pgsql.so
|
%{_libdir}/%{name}/dict/libdriver_pgsql.so
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Aug 05 2024 Michal Hlavinka <mhlavink@redhat.com> - 1:2.3.21-13
|
||||||
|
- fix crash when user has sieve script that includes two missing scripts (RHEL-52541)
|
||||||
|
|
||||||
* Tue Jul 23 2024 Michal Hlavinka <mhlavink@redhat.com> - 1:2.3.21-12
|
* Tue Jul 23 2024 Michal Hlavinka <mhlavink@redhat.com> - 1:2.3.21-12
|
||||||
- fix building with noengine openssl
|
- fix building with noengine openssl
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user