Fix rangeShift calculations for count=0 in sfnt, cmap, and kern
diff --git a/Lib/fontTools/ttLib/sfnt.py b/Lib/fontTools/ttLib/sfnt.py
index c6bc93a..95679e9 100644
--- a/Lib/fontTools/ttLib/sfnt.py
+++ b/Lib/fontTools/ttLib/sfnt.py
@@ -483,7 +483,7 @@
 	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 d0c6c41..a3fb6cc 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 @@
 		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 9fa9dd8..b8e60d3 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 @@
 		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)