mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-26 18:06: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)
|
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():
|
def test_invalid_file():
|
||||||
with open("Tests/images/flower.jpg", "rb") as fp:
|
with open("Tests/images/flower.jpg", "rb") as fp:
|
||||||
with pytest.raises(SyntaxError):
|
with pytest.raises(SyntaxError):
|
||||||
|
|
|
@ -84,8 +84,7 @@ class PcfFontFile(FontFile.FontFile):
|
||||||
#
|
#
|
||||||
# create glyph structure
|
# create glyph structure
|
||||||
|
|
||||||
for ch in range(256):
|
for ch, ix in enumerate(encoding):
|
||||||
ix = encoding[ch]
|
|
||||||
if ix is not None:
|
if ix is not None:
|
||||||
x, y, l, r, w, a, d, f = metrics[ix]
|
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]
|
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
|
return bitmaps
|
||||||
|
|
||||||
def _load_encoding(self):
|
def _load_encoding(self):
|
||||||
|
|
||||||
# map character code to bitmap index
|
|
||||||
encoding = [None] * 256
|
|
||||||
|
|
||||||
fp, format, i16, i32 = self._getformat(PCF_BDF_ENCODINGS)
|
fp, format, i16, i32 = self._getformat(PCF_BDF_ENCODINGS)
|
||||||
|
|
||||||
first_col, last_col = i16(fp.read(2)), i16(fp.read(2))
|
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)
|
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)]
|
encoding_offsets = [i16(fp.read(2)) for _ in range(nencoding)]
|
||||||
|
|
||||||
for i in range(first_col, len(encoding)):
|
for i in range(first_col, len(encoding)):
|
||||||
|
@ -244,7 +242,5 @@ class PcfFontFile(FontFile.FontFile):
|
||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError:
|
||||||
# character is not supported in selected encoding
|
# character is not supported in selected encoding
|
||||||
pass
|
pass
|
||||||
except IndexError:
|
|
||||||
break
|
|
||||||
|
|
||||||
return encoding
|
return encoding
|
||||||
|
|
Loading…
Reference in New Issue
Block a user