From bd71374cd2ebf43de421f38e3e15f273ba9ed47e Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Sun, 26 Jan 2020 07:08:58 -0800 Subject: [PATCH] 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. --- src/PIL/Image.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 54b281bba..114a6ec0a 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -401,15 +401,17 @@ def _getdecoder(mode, decoder_name, args, extra=()): try: decoder = DECODERS[decoder_name] - return decoder(mode, *args + extra) except KeyError: pass + else: + return decoder(mode, *args + extra) + try: # get decoder decoder = getattr(core, decoder_name + "_decoder") - return decoder(mode, *args + extra) except AttributeError: raise OSError("decoder %s not available" % decoder_name) + return decoder(mode, *args + extra) def _getencoder(mode, encoder_name, args, extra=()): @@ -422,15 +424,17 @@ def _getencoder(mode, encoder_name, args, extra=()): try: encoder = ENCODERS[encoder_name] - return encoder(mode, *args + extra) except KeyError: pass + else: + return encoder(mode, *args + extra) + try: # get encoder encoder = getattr(core, encoder_name + "_encoder") - return encoder(mode, *args + extra) except AttributeError: raise OSError("encoder %s not available" % encoder_name) + return encoder(mode, *args + extra) # --------------------------------------------------------------------