[feaLib] Check lookup index in chaining lookups

Raise if lookup_index is None, which would happen only of the lookup
referenced belongs to the wrong table. The error message needs to be less
cryptic, though.

Fixes https://github.com/fonttools/fonttools/issues/1896
This commit is contained in:
Khaled Hosny 2020-04-27 02:30:10 +02:00
parent ec6205199e
commit 4526e164f1
2 changed files with 28 additions and 0 deletions

View File

@ -1263,6 +1263,9 @@ class ChainContextPosBuilder(LookupBuilder):
st.PosLookupRecord = []
for sequenceIndex, l in enumerate(lookups):
if l is not None:
if l.lookup_index is None:
raise FeatureLibError('Missing lookup index',
self.location)
rec = otTables.PosLookupRecord()
rec.SequenceIndex = sequenceIndex
rec.LookupListIndex = l.lookup_index
@ -1310,6 +1313,9 @@ class ChainContextSubstBuilder(LookupBuilder):
st.SubstLookupRecord = []
for sequenceIndex, l in enumerate(lookups):
if l is not None:
if l.lookup_index is None:
raise FeatureLibError('Missing lookup index',
self.location)
rec = otTables.SubstLookupRecord()
rec.SequenceIndex = sequenceIndex
rec.LookupListIndex = l.lookup_index

View File

@ -430,6 +430,28 @@ class BuilderTest(unittest.TestCase):
"Lookup blocks cannot be placed inside 'aalt' features",
self.build, "feature aalt {lookup L {} L;} aalt;")
def test_chain_subst_refrences_GPOS_looup(self):
self.assertRaisesRegex(
FeatureLibError,
"Missing lookup index",
self.build,
"lookup dummy { pos a 50; } dummy;"
"feature test {"
" sub a' lookup dummy b;"
"} test;"
)
def test_chain_pos_refrences_GSUB_looup(self):
self.assertRaisesRegex(
FeatureLibError,
"Missing lookup index",
self.build,
"lookup dummy { sub a by A; } dummy;"
"feature test {"
" pos a' lookup dummy b;"
"} test;"
)
def test_extensions(self):
class ast_BaseClass(ast.MarkClass):
def asFea(self, indent=""):