From 4860a88243ff2ea54f393f1ac38f3b36ef5c753a Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 27 May 2015 16:03:22 -0700 Subject: [PATCH] [kern] Speed up decompiling by 4x Mostly by not creating a new object in the hot loop. --- Lib/fontTools/ttLib/tables/_k_e_r_n.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/Lib/fontTools/ttLib/tables/_k_e_r_n.py b/Lib/fontTools/ttLib/tables/_k_e_r_n.py index ae62f792e..4d0cb9082 100644 --- a/Lib/fontTools/ttLib/tables/_k_e_r_n.py +++ b/Lib/fontTools/ttLib/tables/_k_e_r_n.py @@ -102,16 +102,10 @@ class KernTable_format_0(object): nPairs, searchRange, entrySelector, rangeShift = struct.unpack(">HHHH", data[:8]) data = data[8:] - for k in range(nPairs): - if len(data) < 6: - # buggy kern table - data = b"" - break - left, right, value = struct.unpack(">HHh", data[:6]) - data = data[6:] - left, right = int(left), int(right) + for k in range(min(nPairs, len(data) // 6)): + left, right, value = struct.unpack(">HHh", data[6*k:6*k+6]) kernTable[(ttFont.getGlyphName(left), ttFont.getGlyphName(right))] = value - if len(data): + if len(data) > 6 * nPairs: warnings.warn("excess data in 'kern' subtable: %d bytes" % len(data)) def compile(self, ttFont):