From a292d4dcb2c42edb15490b3c6b11b029536ff30a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20Wobst?= Date: Mon, 26 Sep 2005 09:45:44 +0000 Subject: [PATCH] avoid overflow (or auto conversion to long) in Python version of the t1 decoder/encoder git-svn-id: https://pyx.svn.sourceforge.net/svnroot/pyx/trunk/pyx@2486 069f4177-920e-0410-937b-c2a4a81bcd90 --- pyx/font/t1code.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pyx/font/t1code.py b/pyx/font/t1code.py index 9f54cc2e..13d84a2a 100644 --- a/pyx/font/t1code.py +++ b/pyx/font/t1code.py @@ -22,20 +22,22 @@ import array +c1 = 52845 +c1_16, c1_8 = divmod(c1, 0x100) # to avoid overflow (or conversion to the slow long integers) +c2 = 22719 + def decoder(code, r, n): - c1 = 52845 - c2 = 22719 plain = array.array("B") for x in array.array("B", code): plain.append(x ^ (r >> 8)) - r = ((x + r) * c1 + c2) & 0xffff + # r = ((x + r) * c1 + c2) & 0xffff # this might overflow + r = ((((x + r) * c1_16) & 0xff) * 0x100 + (x + r) * c1_8 + c2) & 0xffff return plain.tostring()[n:] def encoder(data, r, random): - c1 = 52845 - c2 = 22719 code = array.array("B") for x in array.array("B", random+data): code.append(x ^ (r>>8)) - r = ((code[-1] + r) * c1 + c2) & 0xffff; + # r = ((code[-1] + r) * c1 + c2) & 0xffff # this might overflow + r = ((((code[-1] + r) * c1_16) & 0xff) * 0x100 + (code[-1] + r) * c1_8 + c2) & 0xffff return code.tostring() -- 2.11.4.GIT