sieve: free discarded parser values after syntax errors

This commit is contained in:
Mario Fetka
2026-07-19 12:51:56 +02:00
parent fe399ae25a
commit df84aec0b7
11 changed files with 489 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
AUX comsatd.initd 569 BLAKE2B 1b4ad287b67ef6d95fbc626296e79a857264754159967c54105e9d9f4493e95d3494cfce6082f289358021e02bbaac580a1b4d78ca8b2cc713af57197e532431 SHA512 9c36ddf70bf4f0e3c56f55651a740014078e3a1a79569a62ccd74e1ec7167eac6ecb69d56c15913d815c472fe943d17a1e781a669208d37c97671afea2208f8f
AUX imap4d.initd 566 BLAKE2B 2d030e47f63b4133eed4b47c9069c54de290f907d9429eb99675380569e1e0efdbb1172664ba1ee0f2924ac7284981fbe350d1543a6d0790722456523d997535 SHA512 51d6cf4285c6823d97e52c7eb408a80aa66376f329685acdc21e096c2099a044b2fd18e7b9e5ed89406a3cd1f16b7aa7b0243f8ea46aa7824da48b566ec00324
AUX mail 82 BLAKE2B 6d9cc293deff8f99cea0ce8842dd34e658844ca9a1f4e530d3c95f8154ed337ab6ccc2b6263af9cfa8078913a7b70beb5874c999174d5648c1faeace8f68e146 SHA512 80080a3118ed66cfde44ad3663e4b07bcd5fe756b86a213ea4e1ab86e27f8485dcf02af3ee6b7f6f12105a267b9619376668e0cb6e60743ffb7664d2dbea9144
AUX mailutils-3.21-sieve-parser-error-leak.patch 1066 BLAKE2B f7f585390ab429e60c993023ad16f828f36bff5353f529903716356346380c96d64ddc8e29110ab35125fc71c7a9a4b47103c2353f0baae21c2979d167909711 SHA512 dd1cf212caa24e367967c4bd5ca2d7edc8ddf1bd7b68b01540e63cbc4907cdc93363f5ce76f36b0963423921fe6eb738a27609fff04688c6b9f7783aeb10b92f
AUX mailutils-3.5-add-include.patch 275 BLAKE2B 2502fb3226bc63ae98d018392fa1107b4079ea51cd8e57b4e97522d21e696bd6048fad2de885f88644d23f434a6e407f42ba8fcbcfe5b1e65884f37718e34328 SHA512 0972cde536a1a82fe243c9b048fc15f4863586a2344b54c9b4f6f8a5935762c7272c0af2698239af7de9da62b1c2928bc7f621e01f447423fdd8288cedee88b6
AUX mailutils-fix-test-failure.patch 3804 BLAKE2B 22b1b379e142db53615cd1d7d93d1653933cae4b6db1b8f7ee6ac80b105f4db75c754f8c77a4a4c73db0c1551efacbc5e3108ed6714ab5179542dc3247cb8c3b SHA512 3a88d25ff341dfc425476abda1632fdfa88e8d3602899427c69aa04ee31239035ed29781fca915bceb37bd2c315caeb9b15a1133a16fd71f817ef4ee180db5f7
AUX mailutils.rc 258 BLAKE2B 3dc68190e11c8bf5016b0fe8b22c61f79ba7de96a1f230f7d0743ba23fa903cb9f99fac94a7363c7d80b7bbaf76e2d4de848e7ac726642fb23c56caf43a46568 SHA512 691bcc81fd355d8f2776e72006c149996273579e099f24970ff0c5dd6bdf65cd64e31597f8b3d8e0a900a91c3325b8d2a1a96682a9b3ff53acd41218fe8721fe
AUX pop3d.initd 563 BLAKE2B fd09d7a7499c888eddfb812644102f979c2423e9b1a9f0077655b6ae4c1eb4214f685ef7843e74a808e52ee988cc3fbefa278754db824256a4972c83fc0ada31 SHA512 7847c29a03f21df82d36c077ccb38329457a332cccdfba24bee3b1c9a8170fc71c07ee674408f069693953dd1bf44b8b8f782dcc35d6b16e62f70b2b32ce018f
DIST mailutils-3.21.tar.xz 3381076 BLAKE2B 395da966e7a290a53665a79f7984185cd73583c599d3b7d05a6b4ec1113fcaab5e526a3323cef36e75fa0eb0f26efdfb4f5874d1dbd633ee9a0a025a9e219140 SHA512 b006a0713d188d003c935b583ffa26284e79c05b808dbe4122aa0049cf0a6af9324ca8518f863aab507a9ac3b041b2cd1b88d9c10f9e6d6a000b8d83b2e22759
EBUILD mailutils-3.21.ebuild 4090 BLAKE2B 3db331a6a782eea49d383537db34d5af46f4f6c4e94bc1efd24b0b10604e9e83bd8ef5fd8323c2bedcb05d0574d70fdb74e7cffccbe5f7ae7a116eb7b6a9a97d SHA512 a4e0ebd736e1e4ad9efbf9c403b27c2b8887c845a135ea549b5913751b58977dc1e2ba033d2b371f4baf16b141ed1d68cb07ed8bbe2f9b07939804d33f0ffbdd
MISC metadata.xml 696 BLAKE2B bb3b5a94573794ee2eb692533f32cba1dcf432166d9b2997cf60104d88e80f5eac7bb836479e4392700b06efe07c071930308183fb235c42be2cf1fdb8810ac0 SHA512 bb093e2aff71bb09a8f20fc64926f8a8d8c036ad3b3cd3ca61389975d623251841e8d93489f457a56a898db81cf71ecdc071190b9bc1990728b3fa0c9b4cfda1
+24
View File
@@ -0,0 +1,24 @@
#!/sbin/openrc-run
#---------------------------------------------------------------------------
# This script starts/stops the GNU Mailutils Comsatd
#---------------------------------------------------------------------------
daemon="GNU Mailutils Comsatd"
exec="/usr/sbin/comsatd"
depend() {
use net
}
start() {
ebegin "Starting $daemon"
start-stop-daemon --start --quiet --exec ${exec} -- -d 1>&2
eend $? "Error starting $daemon"
}
stop() {
ebegin "Stopping $daemon"
start-stop-daemon --stop --quiet --exec ${exec} 1>&2
eend $? "Error stopping $daemon"
}
+24
View File
@@ -0,0 +1,24 @@
#!/sbin/openrc-run
#---------------------------------------------------------------------------
# This script starts/stops the GNU Mailutils Imap4d
#---------------------------------------------------------------------------
daemon="GNU Mailutils Imap4d"
exec="/usr/sbin/imap4d"
depend() {
use net
}
start() {
ebegin "Starting $daemon"
start-stop-daemon --start --quiet --exec ${exec} -- -d 1>&2
eend $? "Error starting $daemon"
}
stop() {
ebegin "Stopping $daemon"
start-stop-daemon --stop --quiet --exec ${exec} 1>&2
eend $? "Error stopping $daemon"
}
+5
View File
@@ -0,0 +1,5 @@
# Sample mail config file
# See info mail for more options
# no debug
debug { };
@@ -0,0 +1,27 @@
diff '--color=auto' -uNr mailutils-3.21.orig/libmu_sieve/sieve-gram.y mailutils-3.21/libmu_sieve/sieve-gram.y
--- mailutils-3.21.orig/libmu_sieve/sieve-gram.y 2026-07-19 12:44:14.665009953 +0200
+++ mailutils-3.21/libmu_sieve/sieve-gram.y 2026-07-19 12:45:52.637464772 +0200
@@ -34,6 +34,7 @@
static void node_list_add (struct mu_sieve_node_list *list,
struct mu_sieve_node *node);
+static void tree_free (struct mu_sieve_node **tree);
%}
@@ -74,6 +75,15 @@ static void node_list_add (struct mu_sieve_node_list *list,
%type <node> else_part
%type <node_list> list testlist elsif_branch maybe_elsif
+/* Reclaim partially built syntax trees and identifiers if error recovery
+ discards their semantic values. Values stored in the machine string and
+ argument pools remain owned by the machine and are released when it is
+ destroyed. */
+%destructor { free ($$); } IDENT
+%destructor { free ($$.ident); } <command>
+%destructor { tree_free (&$$); } <node>
+%destructor { tree_free (&$$.head); } <node_list>
+
%%
input : /* empty */
@@ -0,0 +1,10 @@
--- a/frm/frm.h 2018-02-10 09:06:00.000000000 +0300
+++ b/frm/frm.h 2019-02-07 09:40:57.541489264 +0300
@@ -24,6 +24,7 @@
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
+#include <limits.h>
#include <sys/types.h>
#ifdef HAVE_TERMIOS_H
# include <termios.h>
@@ -0,0 +1,172 @@
--- a/libmailutils/wordsplit/wordsplit.at 2025-12-18 20:44:10.041576656 +0100
+++ b/libmailutils/wordsplit/wordsplit.at 2025-12-18 20:45:50.538476607 +0100
@@ -1207,10 +1207,10 @@
AT_BANNER([Substring removal])
TESTWSP([strip shortest prefix],[wsp-strip wsp-spref],
-[-DA=talis:ac:tanta -DB=talis:ac -DC=talis],
-[${A#*:}
-${B#*:}
-${C#*:}],
+[-D_A=talis:ac:tanta -D_B=talis:ac -D_C=talis],
+[${_A#*:}
+${_B#*:}
+${_C#*:}],
[NF: 1
0: ac:tanta
TOTAL: 1
@@ -1223,10 +1223,10 @@
])
TESTWSP([strip longest prefix],[wsp-strip wsp-lpref],
-[-DA=talis:ac:tanta -DB=talis:ac -DC=talis],
-[${A##*:}
-${B##*:}
-${C##*:}],
+[-D_A=talis:ac:tanta -D_B=talis:ac -D_C=talis],
+[${_A##*:}
+${_B##*:}
+${_C##*:}],
[NF: 1
0: tanta
TOTAL: 1
@@ -1239,10 +1239,10 @@
])
TESTWSP([strip shortest suffix],[wsp-strip wsp-ssuf],
-[-DA=talis:ac:tanta -DB=talis:ac -DC=talis],
-[${A%:*}
-${B%:*}
-${C%:*}],
+[-D_A=talis:ac:tanta -D_B=talis:ac -D_C=talis],
+[${_A%:*}
+${_B%:*}
+${_C%:*}],
[NF: 1
0: talis:ac
TOTAL: 1
@@ -1255,10 +1255,10 @@
])
TESTWSP([strip longest suffix],[wsp-strip wsp-lsuf],
-[-DA=talis:ac:tanta -DB=talis:ac -DC=talis],
-[${A%%:*}
-${B%%:*}
-${C%%:*}],
+[-D_A=talis:ac:tanta -D_B=talis:ac -D_C=talis],
+[${_A%%:*}
+${_B%%:*}
+${_C%%:*}],
[NF: 1
0: talis
TOTAL: 1
--- a/libmailutils/tests/testsuite 2025-12-18 20:44:22.052684969 +0100
+++ b/libmailutils/tests/testsuite 2025-12-18 20:48:14.911648132 +0100
@@ -17432,18 +17432,18 @@
{ set +x
printf "%s\n" "$at_srcdir/wordsplit.at:1209:
- wsp -DA=talis:ac:tanta -DB=talis:ac -DC=talis <<'EOT'
-\${A#*:}
-\${B#*:}
-\${C#*:}
+ wsp -D_A=talis:ac:tanta -D_B=talis:ac -D_C=talis <<'EOT'
+\${_A#*:}
+\${_B#*:}
+\${_C#*:}
EOT
"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:1209"
( $at_check_trace;
- wsp -DA=talis:ac:tanta -DB=talis:ac -DC=talis <<'EOT'
-${A#*:}
-${B#*:}
-${C#*:}
+ wsp -D_A=talis:ac:tanta -D_B=talis:ac -D_C=talis <<'EOT'
+${_A#*:}
+${_B#*:}
+${_C#*:}
EOT
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
@@ -17481,18 +17481,18 @@
{ set +x
printf "%s\n" "$at_srcdir/wordsplit.at:1225:
- wsp -DA=talis:ac:tanta -DB=talis:ac -DC=talis <<'EOT'
-\${A##*:}
-\${B##*:}
-\${C##*:}
+ wsp -D_A=talis:ac:tanta -D_B=talis:ac -D_C=talis <<'EOT'
+\${_A##*:}
+\${_B##*:}
+\${_C##*:}
EOT
"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:1225"
( $at_check_trace;
- wsp -DA=talis:ac:tanta -DB=talis:ac -DC=talis <<'EOT'
-${A##*:}
-${B##*:}
-${C##*:}
+ wsp -D_A=talis:ac:tanta -D_B=talis:ac -D_C=talis <<'EOT'
+${_A##*:}
+${_B##*:}
+${_C##*:}
EOT
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
@@ -17530,18 +17530,18 @@
{ set +x
printf "%s\n" "$at_srcdir/wordsplit.at:1241:
- wsp -DA=talis:ac:tanta -DB=talis:ac -DC=talis <<'EOT'
-\${A%:*}
-\${B%:*}
-\${C%:*}
+ wsp -D_A=talis:ac:tanta -D_B=talis:ac -D_C=talis <<'EOT'
+\${_A%:*}
+\${_B%:*}
+\${_C%:*}
EOT
"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:1241"
( $at_check_trace;
- wsp -DA=talis:ac:tanta -DB=talis:ac -DC=talis <<'EOT'
-${A%:*}
-${B%:*}
-${C%:*}
+ wsp -D_A=talis:ac:tanta -D_B=talis:ac -D_C=talis <<'EOT'
+${_A%:*}
+${_B%:*}
+${_C%:*}
EOT
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
@@ -17579,18 +17579,18 @@
{ set +x
printf "%s\n" "$at_srcdir/wordsplit.at:1257:
- wsp -DA=talis:ac:tanta -DB=talis:ac -DC=talis <<'EOT'
-\${A%%:*}
-\${B%%:*}
-\${C%%:*}
+ wsp -D_A=talis:ac:tanta -D_B=talis:ac -D_C=talis <<'EOT'
+\${_A%%:*}
+\${_B%%:*}
+\${_C%%:*}
EOT
"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "wordsplit.at:1257"
( $at_check_trace;
- wsp -DA=talis:ac:tanta -DB=talis:ac -DC=talis <<'EOT'
-${A%%:*}
-${B%%:*}
-${C%%:*}
+ wsp -D_A=talis:ac:tanta -D_B=talis:ac -D_C=talis <<'EOT'
+${_A%%:*}
+${_B%%:*}
+${_C%%:*}
EOT
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+11
View File
@@ -0,0 +1,11 @@
# Sample mailutils config file. Read by all mailutils programs.
# See info mailutils for details.
# Gentoo default is maildir
mailbox {
mailbox-type maildir;
mailbox-pattern .maildir;
};
# Place individual config files here
include /etc/mailutils.d/;
+24
View File
@@ -0,0 +1,24 @@
#!/sbin/openrc-run
#---------------------------------------------------------------------------
# This script starts/stops the GNU Mailutils Pop3d
#---------------------------------------------------------------------------
daemon="GNU Mailutils Pop3d"
exec="/usr/sbin/pop3d"
depend() {
use net
}
start() {
ebegin "Starting $daemon"
start-stop-daemon --start --quiet --exec ${exec} -- -d 1>&2
eend $? "Error starting $daemon"
}
stop() {
ebegin "Stopping $daemon"
start-stop-daemon --stop --quiet --exec ${exec} 1>&2
eend $? "Error stopping $daemon"
}
+164
View File
@@ -0,0 +1,164 @@
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
GUILE_COMPAT=( 2-2 3-0 )
PYTHON_COMPAT=( python3_{12..14} )
inherit autotools elisp-common flag-o-matic guile-single python-single-r1 toolchain-funcs
DESCRIPTION="A useful collection of mail servers, clients, and filters"
HOMEPAGE="https://mailutils.org/"
SRC_URI="mirror://gnu/mailutils/${P}.tar.xz"
LICENSE="GPL-3+ LGPL-3+"
SLOT="0"
KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ppc ppc64 ~riscv ~s390 ~sparc x86 ~x64-macos"
IUSE="berkdb bidi +clients emacs gdbm sasl guile kerberos kyotocabinet \
ldap mysql nls pam postgres python servers split-usr ssl static-libs test +threads tcpd \
tokyocabinet"
RESTRICT="!test? ( test )"
RDEPEND="
!mail-filter/libsieve
!mail-client/mailx
sys-libs/ncurses:=
sys-libs/readline:=
dev-libs/libltdl:0
virtual/libcrypt:=
virtual/mta
berkdb? ( sys-libs/db:= )
bidi? ( dev-libs/fribidi )
emacs? ( >=app-editors/emacs-23.1:* )
gdbm? ( sys-libs/gdbm:= )
guile? ( ${GUILE_DEPS} )
kerberos? ( virtual/krb5 )
kyotocabinet? ( dev-db/kyotocabinet )
ldap? ( net-nds/openldap:= )
mysql? ( dev-db/mysql-connector-c:= )
nls? ( sys-devel/gettext )
pam? ( sys-libs/pam:= )
postgres? ( dev-db/postgresql:= )
python? ( ${PYTHON_DEPS} )
sasl? ( >=net-misc/gsasl-2.0.0 )
servers? ( virtual/libiconv dev-libs/libunistring:= )
ssl? ( net-libs/gnutls:= )
tcpd? ( sys-apps/tcp-wrappers )
tokyocabinet? ( dev-db/tokyocabinet )
"
DEPEND="${RDEPEND}"
BDEPEND="
virtual/pkgconfig
test? ( dev-util/dejagnu )
"
REQUIRED_USE="
guile? ( ${GUILE_REQUIRED_USE} )
python? ( ${PYTHON_REQUIRED_USE} )
servers? ( tcpd ldap )"
DOCS=( ABOUT-NLS AUTHORS COPYING COPYING.LESSER ChangeLog INSTALL NEWS README THANKS TODO )
PATCHES=(
"${FILESDIR}"/${PN}-3.5-add-include.patch
"${FILESDIR}"/${PN}-fix-test-failure.patch
"${FILESDIR}"/${PN}-3.21-sieve-parser-error-leak.patch
)
pkg_setup() {
use guile && guile-single_pkg_setup
use python && python-single-r1_pkg_setup
}
src_prepare() {
default
if use guile; then
guile_bump_sources
sed -i -e "s|guile|${GUILE}|" libmu_scm/tests/testsuite || die
fi
if use mysql; then
sed -i -e /^INCLUDES/"s:$:$(mysql_config --include):" \
sql/Makefile.am || die
fi
eautoreconf
}
src_configure() {
# bug #943873
append-cflags -std=gnu17
if use guile; then
export GUILE_SNARF="${GUILESNARF}"
export GUILE_TOOLS="${GUILE/guile/guile-tools}"
fi
# maildir is the Gentoo default
econf \
MU_DEFAULT_SCHEME=maildir \
CURSES_LIBS="$($(tc-getPKG_CONFIG) --libs ncurses)" \
$(use_with berkdb berkeley-db) \
$(use_with bidi fribidi) \
$(use_with gdbm) \
$(use_with sasl gsasl) \
$(use_with guile) \
$(use_with kerberos gssapi) \
$(use_with ldap) \
$(use_with mysql) \
$(use_enable nls) \
$(use_enable pam) \
$(use_with postgres) \
$(use_enable python) \
$(use_with ssl gnutls) \
$(use_enable static-libs static) \
$(use_enable threads pthread) \
$(use_with tokyocabinet) \
$(use_with kyotocabinet) \
$(use_with tcpd tcp-wrappers) \
$(use_enable servers build-servers) \
$(use_with servers unistring ) \
$(use_enable clients build-clients) \
EMACS=$(usex emacs emacs no) \
--with-lispdir="${EPREFIX}${SITELISP}/${PN}" \
--with-mail-spool=/var/spool/mail \
--with-readline \
--enable-ipv6 \
--enable-sendmail \
--disable-debug
}
src_install() {
default
insinto /etc
# bug 613112
newins "${FILESDIR}/mailutils.rc" mailutils.conf
keepdir /etc/mailutils.d/
insinto /etc/mailutils.d
doins "${FILESDIR}/mail"
use guile && guile_unstrip_ccache
if use python; then
python_optimize
if use static-libs; then
rm -r "${D}$(python_get_sitedir)/mailutils"/*.{a,la} || die
fi
fi
if use servers; then
newinitd "${FILESDIR}"/imap4d.initd imap4d
newinitd "${FILESDIR}"/pop3d.initd pop3d
newinitd "${FILESDIR}"/comsatd.initd comsatd
fi
# compatibility link
if use clients && use split-usr; then
dosym ../usr/bin/mail /bin/mail
fi
if ! use static-libs; then
find "${D}" -name "*.la" -delete || die
fi
}
+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
<email>eras@gentoo.org</email>
<name>Eray Aslan</name>
</maintainer>
<use>
<flag name="tokyocabinet">Enable Tokyo Cabinet database support</flag>
<flag name="kyotocabinet">Enable Kyoto Cabinet database support</flag>
<flag name="clients">Build client programs - frm maidag mail sieve messages readmsg dotlock movemail mimeview mh</flag>
<flag name="servers">Build server programs - imap4d pop3d comsatd</flag>
</use>
<upstream>
<remote-id type="savannah">mailutils</remote-id>
</upstream>
</pkgmetadata>