Views
No views yet
# Symlink PoConnx.load(...), and ONNX Runtime 1.26.0 rejects it during InferenceSession(...). However, two public ONNX helper paths read the external data through a #-prefixed parent symlink when callers pass an empty base directory:onnx.external_data_helper.load_external_data_for_model(model, base_dir="")onnx.numpy_helper.to_array(tensor, base_dir="")1model_path = "poc_hash_external.onnx"
2base_dir = os.path.dirname(model_path) # ""#outside/marker.binmodel_dir/#outside as a symlink to ../outside_dir. The helper path reads ONNX_HASH_SYMLINK_READ through that parent symlink.base_dir="". Default onnx.load(...) and ONNX Runtime reject the same artifact in local validation.onnx==1.21.0onnxruntime==1.26.0modelscan==0.8.8onnx_hash_symlink_case.tar: PoC package preserving the symlink relationship.verify_poc.py: Extracts the tar, verifies the helper/runtime behavior, and prints JSON evidence.make_poc.py: Rebuilds the PoC package files from scratch.verify_original.py: Original local verifier used during research.requirements.txt: Tested dependency versions.1model_dir/poc_hash_external.onnx
2model_dir/#outside -> ../outside_dir
3outside_dir/marker.bin1python -m venv .venv
2. .venv/bin/activate
3pip install -r requirements.txt
4
5python verify_poc.pysymlink_exists: truesymlink_target: ../outside_direxternal_helper_relative_dirname.stdout contains ONNX_HASH_SYMLINK_READnumpy_helper_to_array_relative_dirname.stdout contains ONNX_HASH_SYMLINK_READonnx_load_default.returncode is non-zeroonnxruntime_file.returncode is non-zeroimpact: onnx_external_helpers_read_marker_through_hash_parent_symlink1f1402b58cb192a32d68bf3e20ed8a957d48865456921d460c2e3f3bbb8bccd27 onnx_hash_symlink_case.tar
2d1049d3f676d53cfa93589b4a9b5c8f4b482a9a447d5f4afded50517ad176cf4 model_dir/poc_hash_external.onnx
36519070ba079418a50ef1e664e2407cd6d2cca143e864dc1b6ba1ed62cb30640 outside_dir/marker.binbase_dir=os.path.dirname(model_path) can accidentally pass base_dir="" for relative filenames in the current working directory. In ONNX 1.21.0, the # external-data special case lets a parent symlink named #outside bypass the intended model-directory isolation in that helper path.onnx.load(...) impact.base_dir="".# special case and a narrower helper API precondition.base_dir="" as the model's actual containing directory rather than as a relative working-directory path, or reject empty base directories for external data. The # internal-memory-location special case should not skip containment and symlink validation for helper APIs that open external data from disk.