On 05/20/2013 11:32 AM, Terry Jan Reedy wrote:
On 5/20/2013 11:39 AM, Steven D'Aprano wrote:
On 21/05/13 00:12, Ethan Furman wrote:
As a case in point, base64.py is currently getting a bug fix, and also contains this code:
def b32decode(s, casefold=False, map01=None): . . . for i in range(0, len(s), 8): quanta = s[i: i + 8] acc = 0 try: for c in quanta: acc = (acc << 5) + b32rev[c] except KeyError: raise binascii.Error('Non-base32 digit found') . . . else: raise binascii.Error('Incorrect padding')
Does the KeyError qualify as irrelevant noise?
IMO, it is irrelevant noise, and obviously so. The binascii.Error raised is not a bug to be fixed, it is a deliberate exception and part of the API of the binascii module. That it occurs inside an "except KeyError" block is a mere implementation detail.
Yes, the code could be revised to make a check on c before the indexing. This would be redundant (and a slowdown) in that the check is already done by the indexing mechanism. The whole point of the above is to *replace* the default KeyError with a custom binascii.Error for too-large chars.
And I agree with Georg, please say which bad digit was found.
Actually, that was Antoine, but I'm sure Georg also agrees. ;) -- ~Ethan~