[CFF2IndexOf] Fix data_base

From the spec:
"Offsets in the offset array are relative to the byte
that precedes the object data."
This commit is contained in:
Behdad Esfahbod 2024-03-16 10:42:01 -06:00
parent a1641d91b2
commit 88828e0082
4 changed files with 175 additions and 188 deletions

View File

@ -1861,7 +1861,7 @@ class CFF2Index(BaseConverter):
offsets = readArray(count + 1) offsets = readArray(count + 1)
items = [] items = []
lastOffset = offsets.pop(0) lastOffset = offsets.pop(0)
reader.readData(lastOffset) # In case first offset is not 0 reader.readData(lastOffset - 1) # In case first offset is not 1
for offset in offsets: for offset in offsets:
assert lastOffset <= offset assert lastOffset <= offset
@ -1882,7 +1882,7 @@ class CFF2Index(BaseConverter):
def get_read_item(): def get_read_item():
reader_copy = reader.copy() reader_copy = reader.copy()
offset_pos = reader.pos offset_pos = reader.pos
data_pos = offset_pos + (count + 1) * offSize data_pos = offset_pos + (count + 1) * offSize - 1
readArray = getReadArray(reader_copy, offSize) readArray = getReadArray(reader_copy, offSize)
def read_item(i): def read_item(i):
@ -1924,7 +1924,7 @@ class CFF2Index(BaseConverter):
] ]
offsets = [len(item) for item in items] offsets = [len(item) for item in items]
offsets = [0] + list(accumulate(offsets)) offsets = list(accumulate(offsets, initial=1))
lastOffset = offsets[-1] lastOffset = offsets[-1]
offSize = ( offSize = (

Binary file not shown.

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.47"> <ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.50">
<GlyphOrder> <GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. --> <!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
@ -215,9 +215,6 @@
<namerecord nameID="271" platformID="3" platEncID="1" langID="0x409"> <namerecord nameID="271" platformID="3" platEncID="1" langID="0x409">
0013 0013
</namerecord> </namerecord>
<namerecord nameID="272" platformID="3" platEncID="1" langID="0x409">
0014
</namerecord>
</name> </name>
<post> <post>
@ -536,22 +533,27 @@
<MaxValue>1.0</MaxValue> <MaxValue>1.0</MaxValue>
<AxisNameID>271</AxisNameID> <AxisNameID>271</AxisNameID>
</Axis> </Axis>
<!-- 0014 -->
<Axis>
<AxisTag>0014</AxisTag>
<Flags>0x0</Flags>
<MinValue>-1.0</MinValue>
<DefaultValue>0.0</DefaultValue>
<MaxValue>1.0</MaxValue>
<AxisNameID>272</AxisNameID>
</Axis>
</fvar> </fvar>
<gvar> <gvar>
<version value="1"/> <version value="1"/>
<reserved value="0"/> <reserved value="0"/>
<glyphVariations glyph="glyph00008"> <glyphVariations glyph="glyph00008">
<tuple>
<coord axis="wght" value="1.0"/>
<delta pt="0" x="0" y="-15"/>
<delta pt="1" x="10" y="-15"/>
<delta pt="2" x="10" y="15"/>
<delta pt="3" x="0" y="15"/>
<delta pt="4" x="-25" y="-10"/>
<delta pt="5" x="10" y="-10"/>
<delta pt="6" x="10" y="10"/>
<delta pt="7" x="-25" y="10"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple> <tuple>
<coord axis="0000" value="-1.0"/> <coord axis="0000" value="-1.0"/>
<delta pt="0" x="0" y="0"/> <delta pt="0" x="0" y="0"/>
@ -582,21 +584,6 @@
<delta pt="10" x="0" y="0"/> <delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/> <delta pt="11" x="0" y="0"/>
</tuple> </tuple>
<tuple>
<coord axis="wght" value="1.0"/>
<delta pt="0" x="0" y="-15"/>
<delta pt="1" x="10" y="-15"/>
<delta pt="2" x="10" y="15"/>
<delta pt="3" x="0" y="15"/>
<delta pt="4" x="-25" y="-10"/>
<delta pt="5" x="10" y="-10"/>
<delta pt="6" x="10" y="10"/>
<delta pt="7" x="-25" y="10"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple> <tuple>
<coord axis="0001" value="1.0"/> <coord axis="0001" value="1.0"/>
<delta pt="0" x="0" y="0"/> <delta pt="0" x="0" y="0"/>
@ -661,6 +648,29 @@
</tuple> </tuple>
</glyphVariations> </glyphVariations>
<glyphVariations glyph="glyph00009"> <glyphVariations glyph="glyph00009">
<tuple>
<coord axis="wght" value="1.0"/>
<delta pt="0" x="5" y="-10"/>
<delta pt="1" x="7" y="-9"/>
<delta pt="2" x="9" y="-8"/>
<delta pt="3" x="10" y="-5"/>
<delta pt="4" x="10" y="-2"/>
<delta pt="5" x="10" y="0"/>
<delta pt="6" x="10" y="10"/>
<delta pt="7" x="-10" y="10"/>
<delta pt="8" x="-10" y="-22"/>
<delta pt="9" x="-10" y="-22"/>
<delta pt="10" x="-25" y="0"/>
<delta pt="11" x="-25" y="5"/>
<delta pt="12" x="-22" y="13"/>
<delta pt="13" x="-16" y="20"/>
<delta pt="14" x="-6" y="24"/>
<delta pt="15" x="0" y="25"/>
<delta pt="16" x="0" y="0"/>
<delta pt="17" x="0" y="0"/>
<delta pt="18" x="0" y="0"/>
<delta pt="19" x="0" y="0"/>
</tuple>
<tuple> <tuple>
<coord axis="0000" value="-1.0"/> <coord axis="0000" value="-1.0"/>
<delta pt="0" x="43" y="250"/> <delta pt="0" x="43" y="250"/>
@ -730,29 +740,6 @@
<delta pt="18" x="0" y="0"/> <delta pt="18" x="0" y="0"/>
<delta pt="19" x="0" y="0"/> <delta pt="19" x="0" y="0"/>
</tuple> </tuple>
<tuple>
<coord axis="wght" value="1.0"/>
<delta pt="0" x="5" y="-10"/>
<delta pt="1" x="7" y="-9"/>
<delta pt="2" x="9" y="-8"/>
<delta pt="3" x="10" y="-5"/>
<delta pt="4" x="10" y="-2"/>
<delta pt="5" x="10" y="0"/>
<delta pt="6" x="10" y="10"/>
<delta pt="7" x="-10" y="10"/>
<delta pt="8" x="-10" y="-22"/>
<delta pt="9" x="-10" y="-22"/>
<delta pt="10" x="-25" y="0"/>
<delta pt="11" x="-25" y="5"/>
<delta pt="12" x="-22" y="13"/>
<delta pt="13" x="-16" y="20"/>
<delta pt="14" x="-6" y="24"/>
<delta pt="15" x="0" y="25"/>
<delta pt="16" x="0" y="0"/>
<delta pt="17" x="0" y="0"/>
<delta pt="18" x="0" y="0"/>
<delta pt="19" x="0" y="0"/>
</tuple>
<tuple> <tuple>
<coord axis="0003" value="1.0"/> <coord axis="0003" value="1.0"/>
<delta pt="0" x="0" y="0"/> <delta pt="0" x="0" y="0"/>
@ -822,54 +809,6 @@
<delta pt="18" x="0" y="0"/> <delta pt="18" x="0" y="0"/>
<delta pt="19" x="0" y="0"/> <delta pt="19" x="0" y="0"/>
</tuple> </tuple>
<tuple>
<coord axis="0000" value="-1.0"/>
<coord axis="0002" value="-1.0"/>
<delta pt="0" x="-57" y="3"/>
<delta pt="1" x="-53" y="-8"/>
<delta pt="2" x="-35" y="-15"/>
<delta pt="3" x="-14" y="-13"/>
<delta pt="4" x="0" y="-3"/>
<delta pt="5" x="0" y="5"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="-1" y="0"/>
<delta pt="10" x="7" y="0"/>
<delta pt="11" x="8" y="-2"/>
<delta pt="12" x="5" y="-5"/>
<delta pt="13" x="-6" y="-3"/>
<delta pt="14" x="-26" y="7"/>
<delta pt="15" x="-43" y="16"/>
<delta pt="16" x="0" y="0"/>
<delta pt="17" x="0" y="0"/>
<delta pt="18" x="0" y="0"/>
<delta pt="19" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="0000" value="-1.0"/>
<coord axis="0001" value="1.0"/>
<delta pt="0" x="-42" y="-5"/>
<delta pt="1" x="-43" y="-23"/>
<delta pt="2" x="-31" y="-33"/>
<delta pt="3" x="-13" y="-28"/>
<delta pt="4" x="0" y="-16"/>
<delta pt="5" x="0" y="-10"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="-1" y="0"/>
<delta pt="10" x="7" y="0"/>
<delta pt="11" x="8" y="-8"/>
<delta pt="12" x="4" y="-23"/>
<delta pt="13" x="-8" y="-28"/>
<delta pt="14" x="-29" y="-18"/>
<delta pt="15" x="-45" y="-4"/>
<delta pt="16" x="0" y="0"/>
<delta pt="17" x="0" y="0"/>
<delta pt="18" x="0" y="0"/>
<delta pt="19" x="0" y="0"/>
</tuple>
<tuple> <tuple>
<coord axis="wght" value="1.0"/> <coord axis="wght" value="1.0"/>
<coord axis="0000" value="-1.0"/> <coord axis="0000" value="-1.0"/>
@ -894,30 +833,6 @@
<delta pt="18" x="0" y="0"/> <delta pt="18" x="0" y="0"/>
<delta pt="19" x="0" y="0"/> <delta pt="19" x="0" y="0"/>
</tuple> </tuple>
<tuple>
<coord axis="0001" value="1.0"/>
<coord axis="0002" value="-1.0"/>
<delta pt="0" x="-367" y="0"/>
<delta pt="1" x="-282" y="-12"/>
<delta pt="2" x="-146" y="-21"/>
<delta pt="3" x="-49" y="-19"/>
<delta pt="4" x="1" y="-8"/>
<delta pt="5" x="1" y="0"/>
<delta pt="6" x="1" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="2" y="0"/>
<delta pt="10" x="1" y="0"/>
<delta pt="11" x="1" y="-1"/>
<delta pt="12" x="-41" y="-5"/>
<delta pt="13" x="-127" y="-4"/>
<delta pt="14" x="-256" y="4"/>
<delta pt="15" x="-344" y="13"/>
<delta pt="16" x="0" y="0"/>
<delta pt="17" x="0" y="0"/>
<delta pt="18" x="0" y="0"/>
<delta pt="19" x="0" y="0"/>
</tuple>
<tuple> <tuple>
<coord axis="wght" value="1.0"/> <coord axis="wght" value="1.0"/>
<coord axis="0002" value="-1.0"/> <coord axis="0002" value="-1.0"/>
@ -968,24 +883,71 @@
</tuple> </tuple>
<tuple> <tuple>
<coord axis="0000" value="-1.0"/> <coord axis="0000" value="-1.0"/>
<coord axis="0001" value="1.0"/>
<coord axis="0002" value="-1.0"/> <coord axis="0002" value="-1.0"/>
<delta pt="0" x="57" y="-2"/> <delta pt="0" x="-57" y="3"/>
<delta pt="1" x="53" y="8"/> <delta pt="1" x="-53" y="-8"/>
<delta pt="2" x="35" y="16"/> <delta pt="2" x="-35" y="-15"/>
<delta pt="3" x="14" y="14"/> <delta pt="3" x="-14" y="-13"/>
<delta pt="4" x="0" y="3"/> <delta pt="4" x="0" y="-3"/>
<delta pt="5" x="0" y="-5"/> <delta pt="5" x="0" y="5"/>
<delta pt="6" x="0" y="0"/> <delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/> <delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/> <delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/> <delta pt="9" x="-1" y="0"/>
<delta pt="10" x="-7" y="0"/> <delta pt="10" x="7" y="0"/>
<delta pt="11" x="-8" y="2"/> <delta pt="11" x="8" y="-2"/>
<delta pt="12" x="-4" y="5"/> <delta pt="12" x="5" y="-5"/>
<delta pt="13" x="6" y="2"/> <delta pt="13" x="-6" y="-3"/>
<delta pt="14" x="27" y="-7"/> <delta pt="14" x="-26" y="7"/>
<delta pt="15" x="43" y="-15"/> <delta pt="15" x="-43" y="16"/>
<delta pt="16" x="0" y="0"/>
<delta pt="17" x="0" y="0"/>
<delta pt="18" x="0" y="0"/>
<delta pt="19" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="0000" value="-1.0"/>
<coord axis="0001" value="1.0"/>
<delta pt="0" x="-42" y="-5"/>
<delta pt="1" x="-43" y="-23"/>
<delta pt="2" x="-31" y="-33"/>
<delta pt="3" x="-13" y="-28"/>
<delta pt="4" x="0" y="-16"/>
<delta pt="5" x="0" y="-10"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="-1" y="0"/>
<delta pt="10" x="7" y="0"/>
<delta pt="11" x="8" y="-8"/>
<delta pt="12" x="4" y="-23"/>
<delta pt="13" x="-8" y="-28"/>
<delta pt="14" x="-29" y="-18"/>
<delta pt="15" x="-45" y="-4"/>
<delta pt="16" x="0" y="0"/>
<delta pt="17" x="0" y="0"/>
<delta pt="18" x="0" y="0"/>
<delta pt="19" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="0001" value="1.0"/>
<coord axis="0002" value="-1.0"/>
<delta pt="0" x="-367" y="0"/>
<delta pt="1" x="-282" y="-12"/>
<delta pt="2" x="-146" y="-21"/>
<delta pt="3" x="-49" y="-19"/>
<delta pt="4" x="1" y="-8"/>
<delta pt="5" x="1" y="0"/>
<delta pt="6" x="1" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="2" y="0"/>
<delta pt="10" x="1" y="0"/>
<delta pt="11" x="1" y="-1"/>
<delta pt="12" x="-41" y="-5"/>
<delta pt="13" x="-127" y="-4"/>
<delta pt="14" x="-256" y="4"/>
<delta pt="15" x="-344" y="13"/>
<delta pt="16" x="0" y="0"/> <delta pt="16" x="0" y="0"/>
<delta pt="17" x="0" y="0"/> <delta pt="17" x="0" y="0"/>
<delta pt="18" x="0" y="0"/> <delta pt="18" x="0" y="0"/>
@ -1066,6 +1028,31 @@
<delta pt="18" x="0" y="0"/> <delta pt="18" x="0" y="0"/>
<delta pt="19" x="0" y="0"/> <delta pt="19" x="0" y="0"/>
</tuple> </tuple>
<tuple>
<coord axis="0000" value="-1.0"/>
<coord axis="0001" value="1.0"/>
<coord axis="0002" value="-1.0"/>
<delta pt="0" x="57" y="-2"/>
<delta pt="1" x="53" y="8"/>
<delta pt="2" x="35" y="16"/>
<delta pt="3" x="14" y="14"/>
<delta pt="4" x="0" y="3"/>
<delta pt="5" x="0" y="-5"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="-7" y="0"/>
<delta pt="11" x="-8" y="2"/>
<delta pt="12" x="-4" y="5"/>
<delta pt="13" x="6" y="2"/>
<delta pt="14" x="27" y="-7"/>
<delta pt="15" x="43" y="-15"/>
<delta pt="16" x="0" y="0"/>
<delta pt="17" x="0" y="0"/>
<delta pt="18" x="0" y="0"/>
<delta pt="19" x="0" y="0"/>
</tuple>
<tuple> <tuple>
<coord axis="wght" value="1.0"/> <coord axis="wght" value="1.0"/>
<coord axis="0000" value="-1.0"/> <coord axis="0000" value="-1.0"/>
@ -1094,6 +1081,21 @@
</tuple> </tuple>
</glyphVariations> </glyphVariations>
<glyphVariations glyph="glyph00010"> <glyphVariations glyph="glyph00010">
<tuple>
<coord axis="wght" value="1.0"/>
<delta pt="0" x="10" y="-10"/>
<delta pt="1" x="10" y="0"/>
<delta pt="2" x="10" y="10"/>
<delta pt="3" x="-10" y="10"/>
<delta pt="4" x="-10" y="-22"/>
<delta pt="5" x="-5" y="-22"/>
<delta pt="6" x="-25" y="-25"/>
<delta pt="7" x="-25" y="-10"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple> <tuple>
<coord axis="0000" value="-1.0"/> <coord axis="0000" value="-1.0"/>
<delta pt="0" x="0" y="260"/> <delta pt="0" x="0" y="260"/>
@ -1124,21 +1126,6 @@
<delta pt="10" x="0" y="0"/> <delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/> <delta pt="11" x="0" y="0"/>
</tuple> </tuple>
<tuple>
<coord axis="wght" value="1.0"/>
<delta pt="0" x="10" y="-10"/>
<delta pt="1" x="10" y="0"/>
<delta pt="2" x="10" y="10"/>
<delta pt="3" x="-10" y="10"/>
<delta pt="4" x="-10" y="-22"/>
<delta pt="5" x="-5" y="-22"/>
<delta pt="6" x="-25" y="-25"/>
<delta pt="7" x="-25" y="-10"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple> <tuple>
<coord axis="0002" value="1.0"/> <coord axis="0002" value="1.0"/>
<delta pt="0" x="0" y="0"/> <delta pt="0" x="0" y="0"/>
@ -1169,6 +1156,38 @@
<delta pt="10" x="0" y="0"/> <delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/> <delta pt="11" x="0" y="0"/>
</tuple> </tuple>
<tuple>
<coord axis="wght" value="1.0"/>
<coord axis="0000" value="-1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="0" y="0"/>
<delta pt="2" x="0" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="0"/>
<delta pt="5" x="-20" y="0"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="wght" value="1.0"/>
<coord axis="0001" value="-1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="0" y="0"/>
<delta pt="2" x="0" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="0"/>
<delta pt="5" x="-20" y="0"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple> <tuple>
<coord axis="0000" value="-1.0"/> <coord axis="0000" value="-1.0"/>
<coord axis="0001" value="-1.0"/> <coord axis="0001" value="-1.0"/>
@ -1185,38 +1204,6 @@
<delta pt="10" x="0" y="0"/> <delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/> <delta pt="11" x="0" y="0"/>
</tuple> </tuple>
<tuple>
<coord axis="wght" value="1.0"/>
<coord axis="0000" value="-1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="0" y="0"/>
<delta pt="2" x="0" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="0"/>
<delta pt="5" x="-20" y="0"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="wght" value="1.0"/>
<coord axis="0001" value="-1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="0" y="0"/>
<delta pt="2" x="0" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="0"/>
<delta pt="5" x="-20" y="0"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple> <tuple>
<coord axis="wght" value="1.0"/> <coord axis="wght" value="1.0"/>
<coord axis="0000" value="-1.0"/> <coord axis="0000" value="-1.0"/>

Binary file not shown.