8000 Fix two crashes on slightly broken font files · matplotlib/matplotlib@b9e71c5 · GitHub
[go: up one dir, main page]

Skip to content

Commit b9e71c5

Browse files
committed
Fix two crashes on slightly broken font files
The zeros at the end are not needed by our implementation so don't crash if there are too few. Always pass an even number of bytes to unhexlify.
1 parent b81313f commit b9e71c5

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

lib/matplotlib/type1font.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424
import binascii
2525
import enum
2626
import itertools
27+
import logging
2728
import re
2829
import struct
2930

3031
import numpy as np
3132

3233
from matplotlib.cbook import _format_approx
3334

35+
_log = logging.getLogger(__name__)
3436

3537
# token types
3638
_TokenType = enum.Enum('_TokenType',
@@ -128,13 +130,16 @@ def _split(self, data):
128130
zeros -= 1
129131
idx -= 1
130132
if zeros:
131-
raise RuntimeError('Insufficiently many zeros in Type 1 font')
133+
# this may have been a problem on old implementations that
134+
# used the zeros as necessary padding
135+
_log.info('Insufficiently many zeros in Type 1 font')
132136

133137
# Convert encrypted part to binary (if we read a pfb file, we may end
134138
# up converting binary to hexadecimal to binary again; but if we read
135139
# a pfa file, this part is already in hex, and I am not quite sure if
136140
# even the pfb format guarantees that it will be in binary).
137-
binary = binascii.unhexlify(data[len1:idx+1])
141+
idx1 = len1 + ((idx - len1 + 2) & ~1) # ensure an even number of bytes
142+
binary = binascii.unhexlify(data[len1:idx1])
138143

139144
return data[:len1], binary, data[idx+1:]
140145

0 commit comments

Comments
 (0)
0