diff --git a/Lib/fontTools/ufoLib/glifLib.py b/Lib/fontTools/ufoLib/glifLib.py index 62e87db0d..8f5cba064 100755 --- a/Lib/fontTools/ufoLib/glifLib.py +++ b/Lib/fontTools/ufoLib/glifLib.py @@ -1191,8 +1191,12 @@ def _readGlyphFromTreeFormat1( haveSeenAdvance = True _readAdvance(glyphObject, element) elif element.tag == "unicode": + v = element.get("hex") + if v is None: + raise GlifLibError( + "A unicode element is missing its required hex attribute." + ) try: - v = element.get("hex") v = int(v, 16) if v not in unicodes: unicodes.append(v) @@ -1254,8 +1258,12 @@ def _readGlyphFromTreeFormat2( haveSeenAdvance = True _readAdvance(glyphObject, element) elif element.tag == "unicode": + v = element.get("hex") + if v is None: + raise GlifLibError( + "A unicode element is missing its required hex attribute." + ) try: - v = element.get("hex") v = int(v, 16) if v not in unicodes: unicodes.append(v) diff --git a/Tests/ufoLib/GLIF1_test.py b/Tests/ufoLib/GLIF1_test.py index c4991ca3e..64af3f6a2 100644 --- a/Tests/ufoLib/GLIF1_test.py +++ b/Tests/ufoLib/GLIF1_test.py @@ -300,6 +300,22 @@ class TestGLIF1(unittest.TestCase): self.assertRaises(GlifLibError, self.pyToGLIF, py) self.assertRaises(GlifLibError, self.glifToPy, glif) + def testUnicodes_hex_present(self): + """Test that a present element must have a + 'hex' attribute; by testing that an invalid + element raises an appropriate error. + """ + + # illegal + glif = """ + + + + + + """ + self.assertRaises(GlifLibError, self.glifToPy, glif) + def testNote(self): glif = """ diff --git a/Tests/ufoLib/GLIF2_test.py b/Tests/ufoLib/GLIF2_test.py index d8c96d653..a193ab5c5 100644 --- a/Tests/ufoLib/GLIF2_test.py +++ b/Tests/ufoLib/GLIF2_test.py @@ -300,6 +300,22 @@ class TestGLIF2(unittest.TestCase): self.assertRaises(GlifLibError, self.pyToGLIF, py) self.assertRaises(GlifLibError, self.glifToPy, glif) + def testUnicodes_hex_present(self): + """Test that a present element must have a + 'hex' attribute; by testing that an invalid + element raises an appropriate error. + """ + + # illegal + glif = """ + + + + + + """ + self.assertRaises(GlifLibError, self.glifToPy, glif) + def testNote(self): glif = """