DMARC processing assumes `txt_rec.items` has a zero key/is non-empty
I get the following exception when processing email from GMail senders, with Debian's mailman3 3.2.2-1 (detailed info below):
Oct 29 16:00:09 2020 (1931) 127.0.0.1 - - "POST /3.1/members/find HTTP/1.1" 200 1090
Oct 29 16:00:09 2020 (1931) 127.0.0.1 - - "GET /3.1/addresses/USERNAME@gmail.com HTTP/1.1" 200 380
Oct 29 16:00:09 2020 (1931) 127.0.0.1 - - "GET /3.1/addresses/USERNAME@gmail.com HTTP/1.1" 200 380
Oct 29 16:00:09 2020 (1931) 127.0.0.1 - - "GET /3.1/lists/loopy.tiker.net HTTP/1.1" 200 361
Oct 29 16:00:09 2020 (1931) 127.0.0.1 - - "GET /3.1/lists/loopy@tiker.net/config HTTP/1.1" 200 2113
Oct 29 16:00:09 2020 (1931) 127.0.0.1 - - "GET /3.1/lists/loopy.tiker.net/member/USERNAMEr%40gmail.com HTTP/1.1" 200 490
Oct 29 16:00:09 2020 (1926) Uncaught runner exception: 0
Oct 29 16:00:09 2020 (1926) Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/mailman/core/runner.py", line 173, in _one_iteration
self._process_one_file(msg, msgdata)
File "/usr/lib/python3/dist-packages/mailman/core/runner.py", line 266, in _process_one_file
keepqueued = self._dispose(mlist, msg, msgdata)
File "/usr/lib/python3/dist-packages/mailman/runners/incoming.py", line 79, in _dispose
process(mlist, msg, msgdata, start_chain)
File "/usr/lib/python3/dist-packages/mailman/core/chains.py", line 57, in process
if link.rule.check(mlist, msg, msgdata):
File "/usr/lib/python3/dist-packages/mailman/rules/dmarc.py", line 314, in check
if maybe_mitigate(mlist, address):
File "/usr/lib/python3/dist-packages/mailman/rules/dmarc.py", line 286, in maybe_mitigate
answer = is_reject_or_quarantine(
File "/usr/lib/python3/dist-packages/mailman/rules/dmarc.py", line 217, in is_reject_or_quarantine
for record in txt_rec.items[0].strings)
KeyError: 0
The current code seems to still make that (apparently flawed) assumption.
-- System Information: Debian Release: bullseye/sid APT prefers testing APT policy: (990, 'testing'), (500, 'stable-updates'), (500, 'oldstable-updates'), (500, 'unstable'), (500, 'stable'), (1, 'experimental') Architecture: amd64 (x86_64)
Kernel: Linux 5.8.0-2-amd64 (SMP w/8 CPU threads) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US:en Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled
Versions of packages mailman3 depends on: ii dbconfig-pgsql 2.0.14 ii dbconfig-sqlite3 2.0.14 ii debconf [debconf-2.0] 1.5.74 ii init-system-helpers 1.58 ii logrotate 3.17.0-1 ii lsb-base 11.1.0 ii python3 3.8.2-3 ii python3-aiosmtpd 1.2-3 ii python3-alembic 1.4.3-1 ii python3-click 7.1.2-1 ii python3-dnspython 2.0.0-1 ii python3-falcon 2.0.0-2 ii python3-flufl.bounce 3.0.1-1 ii python3-flufl.i18n 3.0.1-1 ii python3-flufl.lock 5.0.1-1 ii python3-lazr.config 2.2-2 ii python3-passlib 1.7.2-2 ii python3-psycopg2 2.8.5-1+b1 ii python3-public 0.5-1 ii python3-requests 2.24.0+dfsg-1 ii python3-sqlalchemy 1.3.19+ds1-1 ii python3-zope.component 4.3.0-3 ii python3-zope.configuration 4.4.0-1 ii python3-zope.event 4.4-3 ii python3-zope.interface 5.1.2-1 ii ucf 3.0043
Versions of packages mailman3 recommends: ii exim4-daemon-heavy [mail-transport-agent] 4.94-8
Versions of packages mailman3 suggests: ii elinks [www-browser] 0.13.2-1 pn mailman3-doc ii postgresql 13+221
-- debconf information: mailman3/pgsql/authmethod-admin: ident mailman3/remote/host: localhost mailman3/db/basepath: /var/lib/mailman3/data mailman3/db/app-user: mailman3@localhost mailman3/passwords-do-not-match: mailman3/mysql/authplugin: default mailman3/dbconfig-upgrade: true mailman3/db/dbname: mailman3 mailman3/pgsql/manualconf: mailman3/install-error: abort mailman3/pgsql/authmethod-user: password mailman3/remove-error: abort mailman3/missing-db-package-error: abort mailman3/upgrade-error: abort mailman3/internal/reconfiguring: false mailman3/dbconfig-reinstall: false mailman3/remote/newhost: mailman3/purge: false mailman3/pgsql/admin-user: postgres mailman3/init_service_failed: mailman3/internal/skip-preseed: false mailman3/dbconfig-install: false mailman3/pgsql/no-empty-passwords: mailman3/pgsql/changeconf: false mailman3/mysql/admin-user: mailman3/config_hyperkitty: mailman3/mysql/method: Unix socket mailman3/database-type: mailman3/remote/port: mailman3/upgrade-backup: true mailman3/pgsql/method: TCP/IP mailman3/dbconfig-remove: true