mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-25 17:36:18 +03:00
Limit expected number of characters to nencoding
This commit is contained in:
parent
ce486e77b1
commit
93805d5257
BIN
Tests/fonts/10x20-ISO8859-1-fewer-characters.pcf
Normal file
BIN
Tests/fonts/10x20-ISO8859-1-fewer-characters.pcf
Normal file
Binary file not shown.
|
@ -49,6 +49,14 @@ def test_sanity(request, tmp_path):
|
|||
save_font(request, tmp_path)
|
||||
|
||||
|
||||
def test_less_than_256_characters():
|
||||
with open("Tests/fonts/10x20-ISO8859-1-fewer-characters.pcf", "rb") as test_file:
|
||||
font = PcfFontFile.PcfFontFile(test_file)
|
||||
assert isinstance(font, FontFile.FontFile)
|
||||
# check the number of characters in the font
|
||||
assert len([_f for _f in font.glyph if _f]) == 127
|
||||
|
||||
|
||||
def test_invalid_file():
|
||||
with open("Tests/images/flower.jpg", "rb") as fp:
|
||||
with pytest.raises(SyntaxError):
|
||||
|
|
|
@ -84,8 +84,7 @@ class PcfFontFile(FontFile.FontFile):
|
|||
#
|
||||
# create glyph structure
|
||||
|
||||
for ch in range(256):
|
||||
ix = encoding[ch]
|
||||
for ch, ix in enumerate(encoding):
|
||||
if ix is not None:
|
||||
x, y, l, r, w, a, d, f = metrics[ix]
|
||||
glyph = (w, 0), (l, d - y, x + l, d), (0, 0, x, y), bitmaps[ix]
|
||||
|
@ -219,10 +218,6 @@ class PcfFontFile(FontFile.FontFile):
|
|||
return bitmaps
|
||||
|
||||
def _load_encoding(self):
|
||||
|
||||
# map character code to bitmap index
|
||||
encoding = [None] * 256
|
||||
|
||||
fp, format, i16, i32 = self._getformat(PCF_BDF_ENCODINGS)
|
||||
|
||||
first_col, last_col = i16(fp.read(2)), i16(fp.read(2))
|
||||
|
@ -232,6 +227,9 @@ class PcfFontFile(FontFile.FontFile):
|
|||
|
||||
nencoding = (last_col - first_col + 1) * (last_row - first_row + 1)
|
||||
|
||||
# map character code to bitmap index
|
||||
encoding = [None] * min(256, nencoding)
|
||||
|
||||
encoding_offsets = [i16(fp.read(2)) for _ in range(nencoding)]
|
||||
|
||||
for i in range(first_col, len(encoding)):
|
||||
|
@ -244,7 +242,5 @@ class PcfFontFile(FontFile.FontFile):
|
|||
except UnicodeDecodeError:
|
||||
# character is not supported in selected encoding
|
||||
pass
|
||||
except IndexError:
|
||||
break
|
||||
|
||||
return encoding
|
||||
|
|
Loading…
Reference in New Issue
Block a user