Author: Amaury Forgeot d'Arc <[email protected]>
Branch: stdlib-2.7.9
Changeset: r75459:aeaed06de33f
Date: 2015-01-20 23:41 +0100
http://bitbucket.org/pypy/pypy/changeset/aeaed06de33f/
Log: uudecode: when checking for trailing characters, don't bother
checking the incomplete pending bits. For compatibility with
CPython2.7.9.
diff --git a/pypy/module/binascii/interp_uu.py
b/pypy/module/binascii/interp_uu.py
--- a/pypy/module/binascii/interp_uu.py
+++ b/pypy/module/binascii/interp_uu.py
@@ -19,15 +19,6 @@
return (ord(c) - 0x20) & 0x3f
_a2b_read._always_inline_ = True
-def _a2b_write(space, res, length, char):
- if res.getlength() < length: # common case: we have enough room.
- res.append(chr(char))
- else:
- # overflows. Only accept zeros from now on.
- if char != 0:
- raise_Error(space, "Trailing garbage")
-_a2b_write._always_inline_ = True
-
@unwrap_spec(ascii='bufferstr')
def a2b_uu(space, ascii):
@@ -45,9 +36,20 @@
C = _a2b_read(space, ascii, i+2)
D = _a2b_read(space, ascii, i+3)
#
- _a2b_write(space, res, length, A << 2 | B >> 4)
- _a2b_write(space, res, length, (B & 0xf) << 4 | C >> 2)
- _a2b_write(space, res, length, (C & 0x3) << 6 | D)
+ if res.getlength() < length:
+ res.append(chr(A << 2 | B >> 4))
+ elif A != 0 or B != 0:
+ raise_Error(space, "Trailing garbage")
+ #
+ if res.getlength() < length:
+ res.append(chr((B & 0xf) << 4 | C >> 2))
+ elif C != 0:
+ raise_Error(space, "Trailing garbage")
+ #
+ if res.getlength() < length:
+ res.append(chr((C & 0x3) << 6 | D))
+ elif D != 0:
+ raise_Error(space, "Trailing garbage")
remaining = length - res.getlength()
if remaining > 0:
diff --git a/pypy/module/binascii/test/test_binascii.py
b/pypy/module/binascii/test/test_binascii.py
--- a/pypy/module/binascii/test/test_binascii.py
+++ b/pypy/module/binascii/test/test_binascii.py
@@ -29,6 +29,7 @@
('(WAXR6UBA3#', "\xde\x1e2[X\xa1L0"),
(')WAXR6UBA3#Q', "\xde\x1e2[X\xa1L<@"),
('*WAXR6UBA3#Q!5', "\xde\x1e2[X\xa1L<AT"),
+ ('!,_', '\x33'),
]:
assert self.binascii.a2b_uu(input) == expected
assert self.binascii.a2b_uu(input + ' ') == expected
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit