From 6432a3277d824ce149cf0d105bab6b78a91821a4 Mon Sep 17 00:00:00 2001 From: Mark Sapiro Date: Wed, 13 May 2020 11:10:04 -0700 Subject: Fix potential ValueError in MailList.CheckPending. --- Mailman/MailList.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'Mailman/MailList.py') diff --git a/Mailman/MailList.py b/Mailman/MailList.py index 9e6bbcb6..01a5a915 100644 --- a/Mailman/MailList.py +++ b/Mailman/MailList.py @@ -1,4 +1,4 @@ -# Copyright (C) 1998-2018 by the Free Software Foundation, Inc. +# Copyright (C) 1998-2020 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -846,9 +846,8 @@ class MailList(HTMLFormatter, Deliverer, ListAdmin, for k, v in pends.items(): if k in ('evictions', 'version'): continue - op, data = v - if (op == Pending.SUBSCRIPTION and - data.address.lower() == email.lower()): + if (v[0] == Pending.SUBSCRIPTION and + v[1].address.lower() == email.lower()): return True return False -- cgit v1.2.3 From 248ca38ffb4821a131460c9953aa21d6fe7cec04 Mon Sep 17 00:00:00 2001 From: Mark Sapiro Date: Mon, 18 May 2020 10:01:51 -0700 Subject: Extend REFUSE_SECOND_PENDING to unsubscription as well. --- Mailman/MailList.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'Mailman/MailList.py') diff --git a/Mailman/MailList.py b/Mailman/MailList.py index 01a5a915..fdd47ae1 100644 --- a/Mailman/MailList.py +++ b/Mailman/MailList.py @@ -833,8 +833,8 @@ class MailList(HTMLFormatter, Deliverer, ListAdmin, # # Membership management front-ends and assertion checks # - def CheckPending(self, email): - """Check if there is already an unexpired pending subscription for + def CheckPending(self, email, unsub=False): + """Check if there is already an unexpired pending (un)subscription for this email. """ if not mm_cfg.REFUSE_SECOND_PENDING: @@ -846,8 +846,11 @@ class MailList(HTMLFormatter, Deliverer, ListAdmin, for k, v in pends.items(): if k in ('evictions', 'version'): continue - if (v[0] == Pending.SUBSCRIPTION and - v[1].address.lower() == email.lower()): + op, data = v[:2] + if (op == Pending.SUBSCRIPTION and not unsub and + data.address.lower() == email.lower() or + op == Pending.UNSUBSCRIPTION and unsub and + data.lower() == email.lower()): return True return False @@ -1476,6 +1479,8 @@ class MailList(HTMLFormatter, Deliverer, ListAdmin, assert 0, 'Bad op: %s' % op def ConfirmUnsubscription(self, addr, lang=None, remote=None): + if self.CheckPending(addr, unsub=True): + raise Errors.MMAlreadyPending, email if lang is None: lang = self.getMemberLanguage(addr) cookie = self.pend_new(Pending.UNSUBSCRIPTION, addr) -- cgit v1.2.3