Skip to content

Commit

Permalink
[ttLib.name] Fix findMultilingualName() (#1963)
Browse files Browse the repository at this point in the history
* when reading from binary, name.string may be an encoded bytes sequence: we should call toUnicode() before we compare to the requested string

* fix expected output
  • Loading branch information
justvanrossum committed May 16, 2020
1 parent e86988a commit db26cf8
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 7 deletions.
7 changes: 5 additions & 2 deletions Lib/fontTools/ttLib/tables/_n_a_m_e.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,11 @@ def findMultilingualName(self, names, windows=True, mac=True):
# Collect matching name IDs
matchingNames = dict()
for name in self.names:
key = (name.string, name.platformID,
name.platEncID, name.langID)
try:
key = (name.toUnicode(), name.platformID,
name.platEncID, name.langID)
except UnicodeDecodeError:
continue
if key in reqNameSet:
nameSet = matchingNames.setdefault(name.nameID, set())
nameSet.add(key)
Expand Down
14 changes: 14 additions & 0 deletions Tests/ttLib/tables/_n_a_m_e_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,20 @@ def test_findMultilingualName(self):
self.assertEqual(nameID, table.findMultilingualName(namesSubSet))
self.assertEqual(None, table.findMultilingualName(namesSuperSet))

def test_findMultilingualName_compiled(self):
table = table__n_a_m_e()
names, namesSubSet, namesSuperSet = self._get_test_names()
nameID = table.addMultilingualName(names)
assert nameID is not None
# After compile/decompile, name.string is a bytes sequence, which
# findMultilingualName() should also handle
data = table.compile(None)
table = table__n_a_m_e()
table.decompile(data, None)
self.assertEqual(nameID, table.findMultilingualName(names))
self.assertEqual(nameID, table.findMultilingualName(namesSubSet))
self.assertEqual(None, table.findMultilingualName(namesSuperSet))

def test_addMultilingualNameReuse(self):
table = table__n_a_m_e()
names, namesSubSet, namesSuperSet = self._get_test_names()
Expand Down
10 changes: 5 additions & 5 deletions Tests/varLib/data/test_results/BuildTestCFF2.ttx
Original file line number Diff line number Diff line change
Expand Up @@ -27,31 +27,31 @@

<!-- Regular -->
<!-- PostScript: TestCFF2Roman-Regular -->
<NamedInstance flags="0x0" postscriptNameID="262" subfamilyNameID="261">
<NamedInstance flags="0x0" postscriptNameID="261" subfamilyNameID="2">
<coord axis="wght" value="400.0"/>
</NamedInstance>

<!-- Medium -->
<!-- PostScript: TestCFF2Roman-Medium -->
<NamedInstance flags="0x0" postscriptNameID="264" subfamilyNameID="263">
<NamedInstance flags="0x0" postscriptNameID="263" subfamilyNameID="262">
<coord axis="wght" value="500.0"/>
</NamedInstance>

<!-- Semibold -->
<!-- PostScript: TestCFF2Roman-Semibold -->
<NamedInstance flags="0x0" postscriptNameID="266" subfamilyNameID="265">
<NamedInstance flags="0x0" postscriptNameID="265" subfamilyNameID="264">
<coord axis="wght" value="600.0"/>
</NamedInstance>

<!-- Bold -->
<!-- PostScript: TestCFF2Roman-Bold -->
<NamedInstance flags="0x0" postscriptNameID="268" subfamilyNameID="267">
<NamedInstance flags="0x0" postscriptNameID="267" subfamilyNameID="266">
<coord axis="wght" value="700.0"/>
</NamedInstance>

<!-- Black -->
<!-- PostScript: TestCFF2Roman-Black -->
<NamedInstance flags="0x0" postscriptNameID="270" subfamilyNameID="269">
<NamedInstance flags="0x0" postscriptNameID="269" subfamilyNameID="268">
<coord axis="wght" value="900.0"/>
</NamedInstance>
</fvar>
Expand Down

0 comments on commit db26cf8

Please sign in to comment.