diff --git a/Lib/fontTools/otlLib/builder.py b/Lib/fontTools/otlLib/builder.py index bfb9d41f8..153e20e6f 100644 --- a/Lib/fontTools/otlLib/builder.py +++ b/Lib/fontTools/otlLib/builder.py @@ -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)