Skip to content

Commit

Permalink
Merge pull request #7493 from radarhere/frombytes
Browse files Browse the repository at this point in the history
Fixed frombytes() for images with a zero dimension
  • Loading branch information
radarhere authored Nov 3, 2023
2 parents 14c539e + 91f115b commit a5a6ca1
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 7 deletions.
7 changes: 7 additions & 0 deletions Tests/test_image.py
Original file line number Diff line number Diff line change
Expand Up @@ -906,6 +906,13 @@ def test_zero_tobytes(self, size):
im = Image.new("RGB", size)
assert im.tobytes() == b""

@pytest.mark.parametrize("size", ((1, 0), (0, 1), (0, 0)))
def test_zero_frombytes(self, size):
Image.frombytes("RGB", size, b"")

im = Image.new("RGB", size)
im.frombytes(b"")

def test_has_transparency_data(self):
for mode in ("1", "L", "P", "RGB"):
im = Image.new(mode, (1, 1))
Expand Down
18 changes: 11 additions & 7 deletions src/PIL/Image.py
Original file line number Diff line number Diff line change
Expand Up @@ -791,6 +791,9 @@ def frombytes(self, data, decoder_name="raw", *args):
but loads data into this image instead of creating a new image object.
"""

if self.width == 0 or self.height == 0:
return

# may pass tuple instead of argument list
if len(args) == 1 and isinstance(args[0], tuple):
args = args[0]
Expand Down Expand Up @@ -2967,15 +2970,16 @@ def frombytes(mode, size, data, decoder_name="raw", *args):

_check_size(size)

# may pass tuple instead of argument list
if len(args) == 1 and isinstance(args[0], tuple):
args = args[0]
im = new(mode, size)
if im.width != 0 and im.height != 0:
# may pass tuple instead of argument list
if len(args) == 1 and isinstance(args[0], tuple):
args = args[0]

if decoder_name == "raw" and args == ():
args = mode
if decoder_name == "raw" and args == ():
args = mode

im = new(mode, size)
im.frombytes(data, decoder_name, args)
im.frombytes(data, decoder_name, args)
return im


Expand Down

0 comments on commit a5a6ca1

Please sign in to comment.