Lightly validate the contents of the kerning and groups during reading.

git-svn-id: http://svn.robofab.com/branches/ufo3k@335 b5fa9d6c-a76f-4ffd-b3cb-f825fc41095c
This commit is contained in:
Tal Leming 2011-09-29 13:31:37 +00:00
parent ba16039873
commit 4afcd0f113

View File

@ -239,8 +239,17 @@ class UFOReader(object):
if not self._checkForFile(path):
return {}
data = self._readPlist(path)
invalidFormatMessage = "groups.plist is not properly formatted."
if not isinstance(data, dict):
raise UFOLibError("groups.plist is not properly formatted.")
raise UFOLibError(invalidFormatMessage)
for groupName, glyphList in data.items():
if not isinstance(groupName, basestring):
raise UFOLibError(invalidFormatMessage)
elif not isinstance(glyphList, list):
raise UFOLibError(invalidFormatMessage)
for glyphName in glyphList:
if not isinstance(glyphName, basestring):
raise UFOLibError(invalidFormatMessage)
return data
def readGroups(self):
@ -328,8 +337,19 @@ class UFOReader(object):
if not self._checkForFile(path):
return {}
data = self._readPlist(path)
invalidFormatMessage = "kerning.plist is not properly formatted."
if not isinstance(data, dict):
raise UFOLibError("kerning.plist is not properly formatted.")
raise UFOLibError(invalidFormatMessage)
for first, secondDict in data.items():
if not isinstance(first, basestring):
raise UFOLibError(invalidFormatMessage)
elif not isinstance(secondDict, dict):
raise UFOLibError(invalidFormatMessage)
for second, value in secondDict.items():
if not isinstance(second, basestring):
raise UFOLibError(invalidFormatMessage)
elif not isinstance(value, (int, float)):
raise UFOLibError(invalidFormatMessage)
return data
def readKerning(self):