Skip to content

Commit 0d5a2d2

Browse files
committed
Allow PyDecoder to pass truncated data to C decoder
1 parent e32a94e commit 0d5a2d2

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/PIL/PpmImagePlugin.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,14 @@ def _decode_bitonal(self):
174174
are exactly one byte, and so the inter-token whitespace is optional.
175175
"""
176176
decoded_data = bytearray()
177-
total_bytes = self.size
177+
total_bytes = self.state.xsize * self.state.ysize
178178

179179
comment_spans = False
180180
while len(decoded_data) != total_bytes:
181181
block = self._read_block() # read next block
182182
if not block:
183-
raise ValueError("Reached EOF while reading data")
183+
# eof
184+
break
184185

185186
while block and comment_spans:
186187
comment_end = self._find_comment_end(block)
@@ -206,7 +207,7 @@ def _decode_blocks(self, channels=1, depth=8):
206207
maxval = 2 ** (31 if depth == 32 else depth) - 1
207208
max_len = 10
208209
bytes_per_sample = depth // 8
209-
total_bytes = self.size * channels * bytes_per_sample
210+
total_bytes = self.state.xsize * self.state.ysize * channels * bytes_per_sample
210211

211212
comment_spans = False
212213
half_token = False
@@ -216,7 +217,8 @@ def _decode_blocks(self, channels=1, depth=8):
216217
if half_token:
217218
block = bytearray(b" ") # flush half_token
218219
else:
219-
raise ValueError("Reached EOF while reading data")
220+
# eof
221+
break
220222

221223
while block and comment_spans:
222224
comment_end = self._find_comment_end(block)
@@ -254,7 +256,6 @@ def _decode_blocks(self, channels=1, depth=8):
254256
return decoded_data
255257

256258
def decode(self, buffer):
257-
self.size = self.state.xsize * self.state.ysize
258259
rawmode = self.args[0]
259260

260261
if self.mode == "1":

0 commit comments

Comments
 (0)