import json import os from pathlib import Path import tensorflow as tf from modelscan.modelscan import ModelScan ROOT = Path(__file__).resolve().parent SECRET_LINE = "TOKEN_FROM_MODEL_CHOSEN_FILE=local-fixture-secret" def scan_model() -> int: scanner = ModelScan() scanner.scan(ROOT) return len(scanner.issues.all_issues) def run_model() -> str: loader_cwd = ROOT / "loader_cwd" victim_workspace = ROOT / "victim_workspace" loader_cwd.mkdir(exist_ok=True) victim_workspace.mkdir(exist_ok=True) (victim_workspace / "secret.txt").write_text(SECRET_LINE + "\n") old_cwd = Path.cwd() os.chdir(loader_cwd) try: model = tf.saved_model.load(str(ROOT)) output = model.signatures["serving_default"](x=tf.constant(1.0))[ "leaked_line" ] return output.numpy().decode("utf-8", errors="replace") finally: os.chdir(old_cwd) def main() -> None: leaked_line = run_model() print( json.dumps( { "tensorflow_version": tf.__version__, "visible_gpu_count": len(tf.config.list_physical_devices("GPU")), "cuda_visible_devices": os.environ.get("CUDA_VISIBLE_DEVICES"), "modelscan_issue_count": scan_model(), "leaked_line": leaked_line, "leaked_expected_line": leaked_line == SECRET_LINE, }, indent=2, sort_keys=True, ) ) if __name__ == "__main__": main()