Mark Sapiro pushed to branch master at GNU Mailman / Mailman Core
Commits:
b5630420 by Mark Sapiro at 2021-05-06T23:55:56+00:00
Handle RFC 2047 encoded command with non-ascii prefix.
- - - - -
b3786e04 by Mark Sapiro at 2021-05-06T23:56:08+00:00
Merge branch 'na' into 'master'
Handle RFC 2047 encoded command with non-ascii prefix.
Closes #858
See merge request mailman/mailman!851
- - - - -
4 changed files:
- setup.py
- src/mailman/docs/NEWS.rst
- src/mailman/runners/command.py
- src/mailman/runners/tests/test_confirm.py
Changes:
=====================================
setup.py
=====================================
@@ -111,7 +111,7 @@ case second 'm'. Any other spelling is incorrect.""",
},
install_requires = [
'aiosmtpd>=1.4.1',
- 'alembic',
+ 'alembic<1.6.0',
'atpublic',
'authheaders>=0.9.2',
'authres>=1.0.1',
=====================================
src/mailman/docs/NEWS.rst
=====================================
@@ -56,6 +56,8 @@ Bugs
and #886)
* The mailing list administrators roster ``get_member()`` method now returns
the owner if the target is both an owner and moderator. (Closes #888)
+* Command runner now handles RFC 2047 encoded command with non-ascii prefix.
+ (Closes #858)
Command line
------------
=====================================
src/mailman/runners/command.py
=====================================
@@ -83,8 +83,8 @@ class CommandFinder:
raw_subject = msg.get('subject', '')
try:
subject = str(make_header(decode_header(raw_subject)))
- # Mail commands must be ASCII.
- self.command_lines.append(subject.encode('us-ascii'))
+ # Mail commands must be ASCII, so strip non-ascii.
+ self.command_lines.append(subject.encode('us-ascii', 'ignore'))
except (HeaderParseError, UnicodeError, LookupError):
# The Subject header was unparseable or not ASCII. If the raw
# subject is a unicode object, convert it to ASCII ignoring all
=====================================
src/mailman/runners/tests/test_confirm.py
=====================================
@@ -109,6 +109,28 @@ To: [email protected]
address = manager.get_address('[email protected]')
self.assertEqual(address.email, '[email protected]')
+ def test_confirm_with_non_ascii_prefix_and_encoded_command(self):
+ msg = mfs("""\
+From: [email protected]
+To: [email protected]
+""")
+ conf = 'confirm {}'.format(self._token)
+ rfc2047_conf = base64.encodebytes(conf.encode()).strip().decode()
+ msg['Subject'] = '=?utf-8?b?5Zue5aSNOiA?= =?us-ascii?b?{}?='.format(
+ rfc2047_conf)
+ self._commandq.enqueue(msg, dict(listid='test.example.com'))
+ self._runner.run()
+ # Anne is now a confirmed member so her user record and email address
+ # should exist in the database.
+ manager = getUtility(IUserManager)
+ user = manager.get_user('[email protected]')
+ address = list(user.addresses)[0]
+ self.assertEqual(address.email, '[email protected]')
+ self.assertEqual(address.verified_on,
+ datetime(2005, 8, 1, 7, 49, 23))
+ address = manager.get_address('[email protected]')
+ self.assertEqual(address.email, '[email protected]')
+
def test_confirm_with_command_in_base64_encoded_body(self):
# Clear out the virgin queue so that the test below only sees the
# reply to the confirmation message.
View it on GitLab:
https://gitlab.com/mailman/mailman/-/compare/732e97a3da9b6b3b27d152ea3458794f2c68f724...b3786e04e8861626e9f70574cbeb91b3b5c66b9b
--
View it on GitLab:
https://gitlab.com/mailman/mailman/-/compare/732e97a3da9b6b3b27d152ea3458794f2c68f724...b3786e04e8861626e9f70574cbeb91b3b5c66b9b
You're receiving this email because of your account on gitlab.com.
_______________________________________________
Mailman-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/mailman-checkins.python.org/
Member address: [email protected]