          length = struct.unpack(">I", png[pointer:pointer + 4])[0]
          pointer += 8
          keyword, value = png[pointer:pointer + length].split(b"\0", 1)
          if keyword == b"faceswap":
              retval = eval(value[4:])
              break
          logger.trace("Skipping iTXt chunk: '%s'", keyword.decode("latin-1", "ignore"))
          pointer += length + 4
      return retval
  
 
</s> remove                     retval["itxt"] = eval(value[4:])
 </s> add                     retval["itxt"] = literal_eval(value[4:].decode("utf-8"))
            retval = literal_eval(value[4:].decode("utf-8"))
          length = struct.unpack(">I", png[pointer:pointer + 4])[0]
          pointer += 8
          keyword, value = png[pointer:pointer + length].split(b"\0", 1)
          if keyword == b"faceswap":
            retval = literal_eval(value[4:].decode("utf-8"))
              break
          logger.trace("Skipping iTXt chunk: '%s'", keyword.decode("latin-1", "ignore"))
          pointer += length + 4
      return retval
  
keep keep keep keep replace keep keep keep keep keep
 Bugfix - Remove ability to execute arbritary code from png header data 
lib/image.py