                  length -= 8
              elif field == b"iTXt":
                  keyword, value = infile.read(length).split(b"\0", 1)
                  if keyword == b"faceswap":
                      retval["itxt"] = eval(value[4:])
                      break
                  else:
                      logger.trace("Skipping iTXt chunk: '%s'", keyword.decode("latin-1", "ignore"))
                      length = 0  # Reset marker for next chunk
              infile.seek(length + 4, 1)
 
</s> remove             retval = eval(value[4:])
 </s> add             retval = literal_eval(value[4:].decode("utf-8"))
                    retval["itxt"] = literal_eval(value[4:].decode("utf-8"))
                  length -= 8
              elif field == b"iTXt":
                  keyword, value = infile.read(length).split(b"\0", 1)
                  if keyword == b"faceswap":
                    retval["itxt"] = literal_eval(value[4:].decode("utf-8"))
                      break
                  else:
                      logger.trace("Skipping iTXt chunk: '%s'", keyword.decode("latin-1", "ignore"))
                      length = 0  # Reset marker for next chunk
              infile.seek(length + 4, 1)
keep keep keep keep replace keep keep keep keep keep
 Bugfix - Remove ability to execute arbritary code from png header data 
lib/image.py