aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2014-05-27 15:54:04 -0400
committerBehdad Esfahbod <behdad@behdad.org>2014-05-27 15:54:04 -0400
commit9fed95216a963b6ef4733d68a691f0ac965b120d (patch)
tree0b69f7abe01ef85b37a09e5aa9964d62366b1ef3
parentec5f5150e2c9ba53696fbddae504a004398b367a (diff)
downloadfonttools-9fed95216a963b6ef4733d68a691f0ac965b120d.tar.gz
Fix rangeShift calculations for count=0 in sfnt, cmap, and kern
-rw-r--r--Lib/fontTools/ttLib/sfnt.py2
-rw-r--r--Lib/fontTools/ttLib/tables/_c_m_a_p.py2
-rw-r--r--Lib/fontTools/ttLib/tables/_k_e_r_n.py2
3 files changed, 3 insertions, 3 deletions
diff --git a/Lib/fontTools/ttLib/sfnt.py b/Lib/fontTools/ttLib/sfnt.py
index c6bc93a9..95679e99 100644
--- a/Lib/fontTools/ttLib/sfnt.py
+++ b/Lib/fontTools/ttLib/sfnt.py
@@ -483,7 +483,7 @@ def getSearchRange(n):
exponent = maxPowerOfTwo(n)
searchRange = (2 ** exponent) * 16
entrySelector = exponent
- rangeShift = n * 16 - searchRange
+ rangeShift = max(0, n * 16 - searchRange)
return searchRange, entrySelector, rangeShift
diff --git a/Lib/fontTools/ttLib/tables/_c_m_a_p.py b/Lib/fontTools/ttLib/tables/_c_m_a_p.py
index d0c6c41f..a3fb6ccc 100644
--- a/Lib/fontTools/ttLib/tables/_c_m_a_p.py
+++ b/Lib/fontTools/ttLib/tables/_c_m_a_p.py
@@ -781,7 +781,7 @@ class cmap_format_4(CmapSubtable):
maxExponent = maxPowerOfTwo(segCount)
searchRange = 2 * (2 ** maxExponent)
entrySelector = maxExponent
- rangeShift = 2 * segCount - searchRange
+ rangeShift = max(0, 2 * segCount - searchRange)
charCodeArray = array.array("H", endCode + [0] + startCode)
idDeltaArray = array.array("H", idDelta)
diff --git a/Lib/fontTools/ttLib/tables/_k_e_r_n.py b/Lib/fontTools/ttLib/tables/_k_e_r_n.py
index 9fa9dd85..b8e60d39 100644
--- a/Lib/fontTools/ttLib/tables/_k_e_r_n.py
+++ b/Lib/fontTools/ttLib/tables/_k_e_r_n.py
@@ -118,7 +118,7 @@ class KernTable_format_0(object):
nPairs = len(self.kernTable)
entrySelector = sfnt.maxPowerOfTwo(nPairs)
searchRange = (2 ** entrySelector) * 6
- rangeShift = (nPairs - (2 ** entrySelector)) * 6
+ rangeShift = max(0, (nPairs - (2 ** entrySelector)) * 6)
data = struct.pack(">HHHH", nPairs, searchRange, entrySelector, rangeShift)
# yeehee! (I mean, turn names into indices)