Package: rspamd
Version: 1.9.4-2+b1
Severity: normal
Dear Maintainer,
rspamadm segfaults with pcre2 10.34. This can be seen in the ci
tests[1], for which rspamd has a bad-test[2] (?), and manually:
root@sid-rspamd:~# dpkg -l|grep pcre
ii libpcre2-8-0:amd64 10.34-3+b1 amd64
New Perl Compatible Regular Expression Library- 8 bit runtime files
ii libpcre3:amd64 2:8.39-12+b1 amd64
Old Perl 5 Compatible Regular Expression Library - runtime files
root@sid-rspamd:~# dpkg -l|grep rspam
ii rspamd 1.9.4-2+b1 amd64
Rapid spam filtering system
root@sid-rspamd:~# rspamadm configtest
Segmentation fault (core dumped)
This also happens in Ubuntu, where there are no bad-test hints and
where rspamd is stuck in migration. In Ubuntu, if I try with pcre2
10.32-5, it works.
The full backtrace is as follows:
Starting program: /usr/bin/rspamadm configtest
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff6f85714 in pcre2_jit_compile_8 (code=0x0,
options=options@entry=1) at src/pcre2_jit_compile.c:13746
13746 src/pcre2_jit_compile.c: No such file or directory.
#0 0x00007ffff6f85714 in pcre2_jit_compile_8 (code=0x0,
options=options@entry=1) at src/pcre2_jit_compile.c:13746
re = 0x0
functions = <optimized out>
executable_allocator_is_working = 1
#1 0x00007ffff7aa1543 in rspamd_regexp_post_process
(r=0x7ffff196af80) at ./src/libutil/regexp.c:190
jsz = 658
jit_flags = 1
jsz = <optimized out>
jit_flags = <optimized out>
__func__ = "rspamd_regexp_post_process"
#2 rspamd_regexp_new (pattern=0x7ffff3b7e6c9 "[$€$¢¥₽]",
flags=0x7ffff47e3600 "u", err=err@entry=0x7fffffffe940) at
./src/libutil/regexp.c:481
start = <optimized out>
end = <optimized out>
flags_str = <optimized out>
err_str = <optimized out>
res = 0x7ffff196af80
explicit_utf = 1
r = 0x7ffff196aec0
sep = <optimized out>
real_pattern = <optimized out>
err_off = 0
regexp_flags = 524288
rspamd_flags = <optimized out>
err_code = 100
ncaptures = 658
strict_flags = <optimized out>
__func__ = "rspamd_regexp_new"
#3 0x00007ffff7b4b61d in rspamd_mime_expr_parse_regexp_atom
(cfg=<optimized out>, line=0x7ffff3b7e670 "/[$€$¢¥₽]/Hu",
pool=0x7ffff4632000) at ./src/libmime/mime_expressions.c:494
end = <optimized out>
p = <optimized out>
err = 0x0
re_flags = 0x7ffff47f1400
begin = 0x7ffff3b7e671 "[$€$¢¥₽]/Hu"
src = 0x7ffff3b7e668 "Subject=/[$€$¢¥₽]/Hu"
dbegin = <optimized out>
start = <optimized out>
brace = <optimized out>
dend = 0x7ffff3b7e6d7 ""
extra = 0x7ffff3b7e6b8 "Subject"
result = 0x7ffff3b7e688
begin = <optimized out>
end = <optimized out>
p = <optimized out>
src = <optimized out>
start = <optimized out>
brace = <optimized out>
dbegin = <optimized out>
dend = <optimized out>
extra = <optimized out>
result = <optimized out>
err = <optimized out>
re_flags = <optimized out>
__func__ = "rspamd_mime_expr_parse_regexp_atom"
#4 rspamd_mime_expr_parse (line=<optimized out>, len=<optimized out>,
pool=0x7ffff4632000, ud=<optimized out>, err=0x7fffffffea60) at
./src/libmime/mime_expressions.c:799
a = 0x0
mime_atom = 0x7ffff3b7e650
p = <optimized out>
end = <optimized out>
c = <optimized out>
real_ud = <optimized out>
cfg = <optimized out>
own_re = <optimized out>
t = <optimized out>
type = <optimized out>
obraces = <optimized out>
ebraces = <optimized out>
state = <optimized out>
prev_state = <optimized out>
__func__ = "rspamd_mime_expr_parse"
#5 0x00007ffff7a86378 in rspamd_parse_expression
(line=line@entry=0x7ffff4749480 "Subject=/[$€$¢¥₽]/Hu", len=<optimized
out>, len@entry=0, subr=0x7ffff7d699e0 <mime_expr_subr>,
subr_data=subr_data@entry=0x7fffffffeaf0,
pool=pool@entry=0x7ffff4632000, err=err@entry=0x7fffffffea60,
target=0x7fffffffea58) at ./src/libutil/expression.c:671
e = 0x7ffff47611d0
elt = {type = ELT_OP, p = {atom = 0x0, op = OP_INVALID, lim =
0}, flags = 0, priority = 0, value = 0}
atom = <optimized out>
num_re = 0x7ffff4645fc0
op = <optimized out>
op_stack = <optimized out>
p = <optimized out>
c = <optimized out>
end = <optimized out>
operand_stack = 0x7ffff47f4e60
tmp = <optimized out>
state = <optimized out>
__func__ = "rspamd_parse_expression"
#6 0x00007ffff7b6842c in read_regexp_expression (pool=0x7ffff4632000,
symbol=0x7ffff4749460 "SUBJECT_HAS_CURRENCY",
line=line@entry=0x7ffff4749480 "Subject=/[$€$¢¥₽]/Hu",
ud=ud@entry=0x7fffffffeaf0, chain=<optimized out>) at
./src/plugins/regexp.c:81
e = 0x0
err = 0x0
__func__ = "read_regexp_expression"
#7 0x00007ffff7b68e8f in regexp_module_config (cfg=0x7ffff4626800) at
./src/plugins/regexp.c:228
group = 0x0
flags = 0
priority = 0
description = 0x0
score = 0
is_lua = 0
valid_expression = 1
ud = {cfg = 0x7ffff4626800, conf_obj = 0x7ffff467c780}
regexp_module_ctx = 0x7ffff3b75f40
cur_item = 0x7ffff3b7e630
sec = 0x7ffff47370c0
value = 0x7ffff467c780
elt = <optimized out>
it = 0x7ffff4625e00
res = 1
id = <optimized out>
nre = 27
nlua = 0
nshots = 1
__func__ = "regexp_module_config"
#8 0x00007ffff7af0ceb in rspamd_init_filters (cfg=0x7ffff4626800,
reconfig=reconfig@entry=false) at ./src/libserver/cfg_utils.c:1539
cur = 0x7ffff463f000
mod = 0x7ffff7d93460 <regexp_module>
pmod = <optimized out>
i = <optimized out>
mod_ctx = 0x7ffff3b75f40
cur_ctx = <optimized out>
ret = 1
__func__ = "rspamd_init_filters"
#9 0x00005555555662f7 in rspamadm_configtest (argc=<optimized out>,
argv=<optimized out>, cmd=<optimized out>) at
./src/rspamadm/configtest.c:155
context = <optimized out>
error = 0x0
confdir = <optimized out>
cfg = 0x7ffff4626800
ret = 1
pworker = <optimized out>
log_cnt = <optimized out>
#10 0x0000555555564825 in main (argc=2, argv=<optimized out>,
env=<optimized out>) at ./src/rspamadm/rspamadm.c:561
error = 0x0
context = <optimized out>
og = <optimized out>
cfg = <optimized out>
process_quark = <optimized out>
nargv = 0x7ffff462f460
targv = 0x7ffff462f460
cmd_name = <optimized out>
cmd = 0x55555558e4e0 <configtest_command>
resolver = <optimized out>
all_commands = <optimized out>
i = <optimized out>
nargc = <optimized out>
targc = 1
pworker = <optimized out>
ev_cfg = 0x7ffff4630f00
I filed this bug against pcre2 upstream, since the crash happens
inside that library: https://bugs.exim.org/show_bug.cgi?id=2487
I didn't file a bug against rspamd upstream yet, as we both are on an
older version (1.9.4 vs 2.2).
1. https://ci.debian.net/data/autopkgtest/unstable/amd64/r/rspamd/3566843/log.gz
2. https://tracker.debian.org/pkg/pcre2:
autopkgtest for rspamd/1.9.4-2: amd64: Ignored failure, arm64: Ignored failure