Skip to content

Commit bd71374

Browse files
committed
Limit try block to code expected to raise an exception
In the off chance that the additional code in decoder()/encoder() raise a KeyError or AttributeError, a bug could be hidden.
1 parent a0a9b76 commit bd71374

1 file changed

Lines changed: 8 additions & 4 deletions

File tree

src/PIL/Image.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -401,15 +401,17 @@ def _getdecoder(mode, decoder_name, args, extra=()):
401401

402402
try:
403403
decoder = DECODERS[decoder_name]
404-
return decoder(mode, *args + extra)
405404
except KeyError:
406405
pass
406+
else:
407+
return decoder(mode, *args + extra)
408+
407409
try:
408410
# get decoder
409411
decoder = getattr(core, decoder_name + "_decoder")
410-
return decoder(mode, *args + extra)
411412
except AttributeError:
412413
raise OSError("decoder %s not available" % decoder_name)
414+
return decoder(mode, *args + extra)
413415

414416

415417
def _getencoder(mode, encoder_name, args, extra=()):
@@ -422,15 +424,17 @@ def _getencoder(mode, encoder_name, args, extra=()):
422424

423425
try:
424426
encoder = ENCODERS[encoder_name]
425-
return encoder(mode, *args + extra)
426427
except KeyError:
427428
pass
429+
else:
430+
return encoder(mode, *args + extra)
431+
428432
try:
429433
# get encoder
430434
encoder = getattr(core, encoder_name + "_encoder")
431-
return encoder(mode, *args + extra)
432435
except AttributeError:
433436
raise OSError("encoder %s not available" % encoder_name)
437+
return encoder(mode, *args + extra)
434438

435439

436440
# --------------------------------------------------------------------

0 commit comments

Comments
 (0)