Merge pull request #2404 from simoncozens/fix-contextual-overflow

[otlLib] Fix chained contextual builder overflow
This commit is contained in:
Simon Cozens 2021-09-15 11:20:39 +01:00 committed by GitHub
commit 3a7c91602c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -388,7 +388,20 @@ class ChainContextualBuilder(LookupBuilder):
if not ruleset.hasAnyGlyphClasses:
candidates[1] = [self.buildFormat1Subtable(ruleset, chaining)]
for i in [1, 2, 3]:
try:
self.getCompiledSize_(candidates[i])
except Exception as e:
log.warning(
"Contextual format %i at %s overflowed (%s)"
% (i, str(self.location), e)
)
candidates[i] = None
candidates = [x for x in candidates if x is not None]
if not candidates:
raise OpenTypeLibError("All candidates overflowed", self.location)
winner = min(candidates, key=self.getCompiledSize_)
subtables.extend(winner)