modelaudit 0.2.32__tar.gz → 0.2.34__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/PULL_REQUEST_TEMPLATE.md +3 -3
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/perf.yml +1 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/release-please.yml +132 -25
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/test.yml +129 -12
- modelaudit-0.2.34/.release-please-manifest.json +3 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/AGENTS.md +14 -13
- {modelaudit-0.2.32 → modelaudit-0.2.34}/CHANGELOG.md +32 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/Dockerfile +1 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/Dockerfile.full +5 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/Dockerfile.tensorflow +1 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/PKG-INFO +1 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/SECURITY.md +13 -13
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/agents/architecture.md +15 -3
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/agents/new-scanner-quickstart.md +12 -11
- modelaudit-0.2.34/docs/agents/picklescan-package-split.md +115 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/cve-process.md +2 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/__init__.py +3 -15
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/auth/config.py +7 -48
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/optimized_config.py +1 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/trusted_config_store.py +1 -40
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cli.py +1383 -1305
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/explanations.py +53 -21
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/core.py +11 -82
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/detectors/cve_patterns.py +11 -80
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/detectors/suspicious_symbols.py +4 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/integrations/sarif_formatter.py +1 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/integrations/sbom_generator.py +1 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/models.py +2 -16
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/progress/base.py +45 -24
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/progress/hooks.py +37 -40
- modelaudit-0.2.34/modelaudit/rule_catalog.py +788 -0
- modelaudit-0.2.34/modelaudit/rules.py +115 -0
- modelaudit-0.2.34/modelaudit/scanner_registry_metadata.py +461 -0
- modelaudit-0.2.34/modelaudit/scanner_results.py +357 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/__init__.py +110 -68
- modelaudit-0.2.34/modelaudit/scanners/_archive_config.py +16 -0
- modelaudit-0.2.34/modelaudit/scanners/_archive_locations.py +30 -0
- modelaudit-0.2.34/modelaudit/scanners/_string_extraction.py +24 -0
- modelaudit-0.2.34/modelaudit/scanners/archive_dispatch.py +115 -0
- modelaudit-0.2.34/modelaudit/scanners/archive_member_security.py +26 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/base.py +84 -368
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/cntk_scanner.py +51 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/compressed_scanner.py +11 -27
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/executorch_scanner.py +14 -16
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/joblib_scanner.py +3 -3
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/keras_h5_scanner.py +4 -41
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/keras_utils.py +59 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/keras_zip_scanner.py +6 -42
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/metadata_scanner.py +2 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/numpy_scanner.py +5 -2
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/oci_layer_scanner.py +30 -7
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/openvino_scanner.py +21 -9
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/pickle_scanner.py +627 -848
- modelaudit-0.2.34/modelaudit/scanners/pickle_support/__init__.py +131 -0
- modelaudit-0.2.34/modelaudit/scanners/pickle_support/opcode_stream.py +763 -0
- modelaudit-0.2.34/modelaudit/scanners/picklescan_adapter.py +474 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/pytorch_zip_scanner.py +224 -392
- modelaudit-0.2.34/modelaudit/scanners/pytorch_zip_support/__init__.py +23 -0
- modelaudit-0.2.34/modelaudit/scanners/pytorch_zip_support/archive_members.py +253 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/rknn_scanner.py +6 -9
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/sevenzip_scanner.py +15 -20
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/tar_scanner.py +7 -10
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/tensorrt_scanner.py +91 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/text_scanner.py +3 -5
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/tf_metagraph_scanner.py +3 -14
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/tf_savedmodel_scanner.py +4 -15
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/tflite_scanner.py +3 -8
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/torch7_scanner.py +6 -9
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/torchserve_mar_scanner.py +13 -14
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/zip_scanner.py +36 -39
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/telemetry.py +1 -1
- modelaudit-0.2.34/modelaudit/utils/_path_hardening.py +65 -0
- modelaudit-0.2.34/modelaudit/utils/file/_compression.py +19 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/file/detection.py +4 -15
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/file/handlers.py +8 -8
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/file/large_file_handler.py +3 -3
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/file/streaming.py +29 -3
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/assets.py +1 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/result_conversion.py +2 -2
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/model_extensions.py +3 -3
- modelaudit-0.2.34/modelaudit/utils/sources/_huggingface_cache.py +70 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/sources/huggingface.py +21 -192
- modelaudit-0.2.34/modelaudit/utils/sources/huggingface_paths.py +135 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/tensorflow_compat.py +17 -3
- modelaudit-0.2.34/modelaudit/version.py +8 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/README.md +47 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/pyproject.toml +104 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/__init__.py +21 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/api.py +125 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/engine/__init__.py +5 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/engine/scanner.py +1093 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/options.py +40 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/py.typed +1 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/report.py +162 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/tests/conftest.py +8 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/tests/test_api.py +515 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/tests/test_import_boundary.py +36 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/tests/test_options.py +39 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/tests/test_report.py +106 -0
- modelaudit-0.2.34/packages/modelaudit-picklescan/uv.lock +8 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/pyproject.toml +9 -3
- {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/README.md +8 -0
- modelaudit-0.2.34/scripts/compare_pickle_scanners.py +340 -0
- modelaudit-0.2.34/scripts/compare_pickle_scanners_fixture_labels.json +36 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/cache/test_cache_correctness.py +13 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/conftest.py +7 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_suspicious_symbols.py +1 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/helpers/__init__.py +2 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/helpers/file_creators.py +18 -3
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_base_scanner.py +45 -3
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_cntk_scanner.py +28 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_compressed_scanner.py +22 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_executorch_scanner.py +35 -0
- modelaudit-0.2.34/tests/scanners/test_joblib_scanner.py +74 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_keras_h5_scanner.py +33 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_keras_zip_scanner.py +68 -18
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_numpy_scanner.py +8 -2
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_oci_layer_scanner.py +100 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_openvino_scanner.py +40 -1
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_pickle_scanner.py +730 -17
- modelaudit-0.2.34/tests/scanners/test_picklescan_adapter.py +701 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_pytorch_zip_scanner.py +123 -0
- modelaudit-0.2.34/tests/scanners/test_scanner_registry.py +490 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_tensorrt_scanner.py +119 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_tf_metagraph_scanner.py +27 -7
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_tf_savedmodel_scanner.py +21 -8
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_zip_scanner.py +148 -24
- modelaudit-0.2.34/tests/scripts/test_compare_pickle_scanners.py +197 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_auth_config.py +1 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_core.py +67 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_directory_file_filtering.py +28 -12
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_false_positive_fixes.py +15 -16
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_huggingface_extensions.py +24 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_huggingface_symlinks.py +38 -6
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_lazy_loading.py +59 -7
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_lazy_loading_integration.py +1 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_metadata_extractor.py +13 -2
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_progress.py +6 -2
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_pytorch_zip_detection.py +10 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_real_world_dill_joblib.py +14 -4
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_rules.py +24 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_streaming_scan.py +57 -17
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_why_explanations.py +18 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_filetype.py +10 -6
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_streaming_analysis.py +54 -7
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/sources/test_huggingface.py +77 -9
- {modelaudit-0.2.32 → modelaudit-0.2.34}/uv.lock +62 -61
- modelaudit-0.2.32/.release-please-manifest.json +0 -3
- modelaudit-0.2.32/modelaudit/rules.py +0 -978
- modelaudit-0.2.32/tests/scanners/test_joblib_scanner.py +0 -42
- modelaudit-0.2.32/tests/scanners/test_scanner_registry.py +0 -161
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.dockerignore +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.editorconfig +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.gitattributes +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/CODEOWNERS +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/markdown-link-check-config.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/README.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/codeql.yml +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/docker-image-test.yml +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/docker-publish.yml +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/docs-check.yml +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/nightly.yml +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/validate-pr-title.yml +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.gitignore +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.mailmap +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.modelaudit.toml.example +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/.prettierignore +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/CLAUDE.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/CODE_OF_CONDUCT.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/CONTRIBUTING.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/LICENSE +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/MAINTAINERS.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/MANIFEST.in +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/README.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/RULES.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/SUPPORT.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/THIRD_PARTY_NOTICES.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/codecov.yml +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docker-compose.yml +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docker-entrypoint.sh +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/agents/dependencies.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/agents/release-process.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/cve-gap-pr-plan-2026-03-20.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/dependency-policy.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/format-gap-plans/coreml-mlmodel.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/format-gap-plans/mxnet-models.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/format-gap-plans/tensorflow-metagraph.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/format-gap-plans/torchserve-mar.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/triage-playbook.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/security/threat-model.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/user/compatibility-matrix.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/user/metadata-extraction.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/user/offline-air-gapped.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/user/security-model.md +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/__main__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/anomaly_detector.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/enhanced_pattern_detector.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/entropy_analyzer.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/framework_patterns.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/integrated_analyzer.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/ml_context_analyzer.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/opcode_sequence_analyzer.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/semantic_analyzer.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/unified_context.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/auth/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/auth/client.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/adaptive_cache_keys.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/batch_operations.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/cache_manager.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/cache_policy.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/scan_results_cache.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/constants.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/data/spdx_licenses.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/generated_keras_layers.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/local_config.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/name_blacklist.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/rule_config.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/detectors/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/detectors/jit_script.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/detectors/network_comm.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/detectors/secrets.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/integrations/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/integrations/jfrog.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/integrations/license_checker.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/integrations/mlflow.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/metadata_extractor.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/progress/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/progress/console.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/progress/file.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/progress/multi_phase.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/LICENSE +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/NOTICE +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/py.typed +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/allocation_description_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/api_def_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/attr_value_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/cost_graph_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/cpp_shape_inference_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/dataset_metadata_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/dataset_options_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/dataset_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/device_attributes_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/full_type_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/function_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/graph_debug_info_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/graph_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/graph_transfer_info_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/kernel_def_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/log_memory_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/model_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/node_def_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/op_def_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/optimized_function_graph_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/reader_base_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/resource_handle_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/step_stats_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/tensor_description_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/tensor_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/tensor_shape_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/tensor_slice_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/types_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/variable_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/versions_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/cluster_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/composite_tensor_variant_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/control_flow_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/core_platform_payloads_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/critical_section_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/data_service_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/debug_event_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/debug_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/device_filters_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/device_properties_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/fingerprint_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/meta_graph_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/named_tensor_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/remote_tensor_handle_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/rewriter_config_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/saved_model_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/saved_object_graph_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/saver_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/service_config_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/snapshot_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/struct_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/tensor_bundle_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/trackable_object_graph_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/transport_options_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/verifier_config_pb2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/py.typed +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/catboost_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/coreml_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/flax_msgpack_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/gguf_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/jax_checkpoint_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/jinja2_template_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/lightgbm_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/llamafile_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/manifest_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/mxnet_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/nemo_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/onnx_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/paddle_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/pmml_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/pytorch_binary_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/r_serialized_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/rule_mapper.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/safetensors_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/skops_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/weight_distribution_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/xgboost_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/auto_defaults.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/file/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/file/filtering.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/auto_defaults.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/cache_decorator.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/code_validation.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/disk_space.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/file_hash.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/file_iterator.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/interrupt_handler.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/ml_context.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/retry.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/secure_hasher.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/types.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/lfs.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/sources/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/sources/cloud_storage.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/sources/dvc.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/sources/jfrog.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/sources/pytorch_hub.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/whitelists/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/whitelists/huggingface_organizations.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/whitelists/huggingface_popular.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/package-lock.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/package.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/pyproject.toml.example +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/release-please-config.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/renovate.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/benchmark_report.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/check_circular_imports.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/compile_tensorflow_protos.sh +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/fetch_hf_org_models.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/fetch_hf_top_models.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/generate_keras_layer_inventory.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/jax_flax_scanning_demo.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/minimal_circular_check.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_analysis_modules.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_anomaly_detector.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_enhanced_pattern_detector.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_entropy_analyzer.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_framework_patterns.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_ml_context_analyzer.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_opcode_sequence_analyzer.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_unified_context.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit1_basic_torch_bypass.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit2_advanced_torch_bypass.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit3_sophisticated_hybrid.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit4_supply_chain_attack.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit5_ultra_high_confidence.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit6_ordereddict_bypass.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit7_nested_collections.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit9_manual_construction.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit_ultimate_50pct.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_7z_test_assets.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_advanced_pickle_tests.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_evil_pickle.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_jinja2_test_assets.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_nested_pickle_assets.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_os_alias_tests.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_safe_nested_assets.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_safetensors_assets.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_security_assets.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/pickles/bypass_pocs/gen_bypass_v4.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/pickles/memo_attack.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/pickles/multiple_stream_attack.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/pickles/nt_alias_attack.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/pickles/posix_alias_attack.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/pickles/stack_global_attack.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/archives/path_traversal.zip +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/archives/safe_model.zip +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign/chatml_format.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign/complex_legitimate.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign/conditional_system.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign/huggingface_llama.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign/simple_roles.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign/special_tokens.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign_conditional_format.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign_huggingface_chat.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign_simple_template.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign_template.j2 +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/edge_cases/empty_template.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/edge_cases/malformed_template.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/edge_cases/multiple_templates.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/edge_cases/no_template.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/edge_cases/oversized_template.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/attr_bypass.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/combined_attack.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/config_exploit.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/cve_2024_34359_original.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/direct_eval.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/env_extraction.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/file_access.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/hex_bypass.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/loop_discovery.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/network_exfil.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/request_exploit.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/subprocess_injection.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious_cve_2024_34359.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious_env_vars.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious_file_read.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious_loop_exploit.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious_obfuscated.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious_subprocess.template +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/obfuscated/base64_payload.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/obfuscated/char_construction.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/obfuscated/format_bypass.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/obfuscated/getattr_bypass.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/standalone/benign_chat.j2 +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/standalone/malicious_standalone.jinja +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/standalone/suspicious_benign.template +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/tokenizer_config.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/yaml/malicious_config.yaml +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/yaml/model_config.yaml +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/basic_lambda_layer.h5 +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/custom_layer_attack.h5 +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/keras_zip_format.keras +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/lambda_exfiltration.h5 +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/lambda_with_imports.h5 +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/loss_injection.h5 +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/malicious_lambda.h5 +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/metric_injection.h5 +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/safe_model.h5 +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/manifests/safe_config.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/manifests/suspicious_config.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/decode_exec_chain.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/dill_func.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/malicious_model_realistic.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/malicious_system_call.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/nested_pickle_base64.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/nested_pickle_hex.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/nested_pickle_multistage.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/nested_pickle_raw.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/safe_data.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/safe_large_model.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/safe_model_with_binary.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/safe_model_with_encoding.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/safe_model_with_tokens.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/safe_nested_structure.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/simple_nested.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pipeline.skops +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pytorch/malicious_eval.pt +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pytorch/safe_model.pt +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/malicious_import.safetensors +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/multiple_patterns.safetensors +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/obfuscated_metadata.safetensors +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/safe_model.safetensors +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/script_injection.safetensors +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/shell_commands.safetensors +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/suspicious_url.safetensors +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/tensorflow/malicious_pyfunc/saved_model.pb +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/tensorflow/safe_savedmodel/saved_model.pb +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/agpl_component/agpl_model.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/agpl_component/neural_network.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mit_model/config.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mit_model/model.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mit_model/model_weights.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mixed_licenses/LICENSE +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mixed_licenses/apache_component.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mixed_licenses/dataset_cc_nc.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mixed_licenses/gpl_utility.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mixed_licenses/mixed_model.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/embeddings.npy +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/features.csv +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/training_data.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/security_scenarios/mixed_malicious_model/config.json +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/security_scenarios/mixed_malicious_model/model.pkl +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/benchmarks/test_scan_benchmarks.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/cache/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/cache/test_optimized_config.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/cli_output.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/config/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/config/test_name_blacklist.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/demo_license_functionality.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_builtin_detection.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_compile_eval_variants.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_cve_detection.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_jit_script_detector.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_network_comm_detector.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_runpy_detection.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_secrets_detector.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/helpers/frameworks.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_jfrog.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_jfrog_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_license_checker.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_license_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_mlflow_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_sarif_formatter.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_sbom_license_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_sbom_url_fixes.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/progress/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/progress/test_base.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_catboost_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_coreml_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_flax_msgpack_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_gguf_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_jax_checkpoint_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_jinja2_template_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_joblib_scanner_codecs.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_lightgbm_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_llamafile_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_manifest_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_metadata_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_mxnet_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_nemo_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_onnx_dependency_handling.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_onnx_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_paddle_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_pmml_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_pytorch_binary_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_r_serialized_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_rknn_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_rule_code_registry_consistency.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_rule_mapper.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_safetensors_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_sevenzip_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_skops_content_analysis.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_skops_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_tar_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_tflite_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_torch7_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_torchserve_mar_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_weight_distribution_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_xgboost_scanner.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_asset_inventory_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_asset_list.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_basic.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_benchmark_report.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_bug1_confidence_exploit.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cache_cli.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cache_optimizations.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_checks_recording.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli_cache_dir.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli_default_command.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli_file_filtering.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli_license_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli_logging_handlers.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli_output.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cloud_url_detection.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_core_asset_extraction.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cve_2025_10155_bin_pickle.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_debug_command.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_dill_joblib_enhanced.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_double_interrupt.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_exit_codes.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_file_hash.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_gguf_sbom_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_graceful_degradation.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_header_discrepancy.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_importlib_detection.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_jax_flax_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_jit_script_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_manifest_name_policy.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_models.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_nested_pickle_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_network_comm_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_os_alias_detection.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_os_subprocess_detection.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_path_traversal.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_performance_benchmarks.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_pickle_context_filtering.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_pydantic_models.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_python_version_warning.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_regression_corpus.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_regular_scan_hash.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_safetensors_optimization.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_secure_hasher.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_security_asset_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_security_enhancements.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_shebang_context.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_simple_jinja2.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_sklearn_joblib_false_positive.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_telemetry.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_telemetry_decoupling.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_tensorflow_lambda_detection.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_timeout_configuration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_utils.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_weak_hash_detection.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_webbrowser_detection.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_xdist_status.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_advanced_file_handler.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_advanced_size_limits.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_file_filter.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_file_type_validation_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_integration_file_type_demo.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_large_file_handler.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_streaming_preview.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_asset_from_scan_result.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_auto_defaults.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_code_validation.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_disk_space.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_file_iterator.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_interrupt_handling.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_ml_context_false_positives.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_py_compile_improvements.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_secure_hasher.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/sources/test_cloud_storage.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/sources/test_dvc_integration.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/sources/test_pytorch_hub.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/test_lfs.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/test_result_conversion.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/whitelists/__init__.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/whitelists/test_combined.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/whitelists/test_huggingface_popular.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/whitelists/test_organizations.py +0 -0
- {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/xdist_status.py +0 -0
|
@@ -4,9 +4,9 @@ Describe the change and user impact.
|
|
|
4
4
|
|
|
5
5
|
## Validation
|
|
6
6
|
|
|
7
|
-
- [ ] `uv run ruff format --check modelaudit/ tests/`
|
|
8
|
-
- [ ] `uv run ruff check modelaudit/ tests/`
|
|
9
|
-
- [ ] `uv run mypy modelaudit
|
|
7
|
+
- [ ] `uv run ruff format --check modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/`
|
|
8
|
+
- [ ] `uv run ruff check modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/`
|
|
9
|
+
- [ ] `uv run mypy modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests`
|
|
10
10
|
- [ ] `uv run pytest -n auto -m "not slow and not integration" --maxfail=1`
|
|
11
11
|
|
|
12
12
|
## Checklist
|
|
@@ -139,7 +139,7 @@ jobs:
|
|
|
139
139
|
always() &&
|
|
140
140
|
github.event_name == 'pull_request' &&
|
|
141
141
|
github.event.pull_request.head.repo.full_name == github.repository
|
|
142
|
-
uses: actions/github-script@
|
|
142
|
+
uses: actions/github-script@v9
|
|
143
143
|
env:
|
|
144
144
|
COMMENT_BODY_PATH: ${{ steps.paths.outputs.artifact_dir }}/benchmark-comment.md
|
|
145
145
|
with:
|
|
@@ -68,6 +68,23 @@ jobs:
|
|
|
68
68
|
echo "✓ uv.lock committed and pushed"
|
|
69
69
|
fi
|
|
70
70
|
|
|
71
|
+
- name: Sync standalone package lock with pyproject.toml
|
|
72
|
+
if: steps.check-pr.outputs.has_pr == 'true'
|
|
73
|
+
working-directory: packages/modelaudit-picklescan
|
|
74
|
+
run: |
|
|
75
|
+
uv lock
|
|
76
|
+
if git diff --quiet uv.lock; then
|
|
77
|
+
echo "✓ packages/modelaudit-picklescan/uv.lock already in sync"
|
|
78
|
+
else
|
|
79
|
+
echo "→ packages/modelaudit-picklescan/uv.lock updated to match pyproject.toml"
|
|
80
|
+
git config user.name "github-actions[bot]"
|
|
81
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
82
|
+
git add uv.lock
|
|
83
|
+
git commit -m "chore: sync standalone package lock"
|
|
84
|
+
git push
|
|
85
|
+
echo "✓ packages/modelaudit-picklescan/uv.lock committed and pushed"
|
|
86
|
+
fi
|
|
87
|
+
|
|
71
88
|
- name: Setup Node.js
|
|
72
89
|
if: steps.check-pr.outputs.has_pr == 'true'
|
|
73
90
|
uses: actions/setup-node@v6
|
|
@@ -115,18 +132,18 @@ jobs:
|
|
|
115
132
|
- name: Sync dependencies
|
|
116
133
|
run: uv sync --extra all-ci
|
|
117
134
|
|
|
118
|
-
- name: Lint with Ruff
|
|
135
|
+
- name: Lint root package with Ruff
|
|
119
136
|
run: uv run ruff check modelaudit/ tests/
|
|
120
137
|
|
|
121
|
-
- name: Check formatting with Ruff
|
|
138
|
+
- name: Check root package formatting with Ruff
|
|
122
139
|
run: uv run ruff format --check modelaudit/ tests/
|
|
123
140
|
|
|
124
|
-
- name: Type check with mypy
|
|
125
|
-
run: uv run mypy modelaudit/
|
|
141
|
+
- name: Type check root package with mypy
|
|
142
|
+
run: uv run mypy modelaudit/ tests/
|
|
126
143
|
|
|
127
|
-
- name: Run tests
|
|
144
|
+
- name: Run root package tests
|
|
128
145
|
run: |
|
|
129
|
-
uv run pytest -n auto -m "not slow and not integration and not performance" --tb=short
|
|
146
|
+
uv run pytest tests -n auto -m "not slow and not integration and not performance" --tb=short
|
|
130
147
|
|
|
131
148
|
- name: Build package
|
|
132
149
|
run: uv build
|
|
@@ -231,20 +248,20 @@ jobs:
|
|
|
231
248
|
fi
|
|
232
249
|
WHEEL_ARTIFACT="${wheel_artifacts[0]}"
|
|
233
250
|
|
|
234
|
-
|
|
235
|
-
source /tmp/modelaudit-wheel-smoke/bin/activate
|
|
251
|
+
uv venv /tmp/modelaudit-wheel-smoke
|
|
236
252
|
|
|
237
|
-
|
|
238
|
-
python -m pip install "${WHEEL_ARTIFACT}"
|
|
253
|
+
uv pip install --python /tmp/modelaudit-wheel-smoke/bin/python "${WHEEL_ARTIFACT}"
|
|
239
254
|
|
|
240
|
-
INSTALLED_VERSION="$(
|
|
255
|
+
INSTALLED_VERSION="$(
|
|
256
|
+
/tmp/modelaudit-wheel-smoke/bin/python -c "import importlib.metadata as m; print(m.version('modelaudit'))"
|
|
257
|
+
)"
|
|
241
258
|
if [[ "$INSTALLED_VERSION" != "$EXPECTED_VERSION" ]]; then
|
|
242
259
|
echo "ERROR: Wheel install version mismatch: expected $EXPECTED_VERSION, got $INSTALLED_VERSION"
|
|
243
260
|
exit 1
|
|
244
261
|
fi
|
|
245
262
|
|
|
246
263
|
# Validate required project URLs in installed metadata.
|
|
247
|
-
python - <<'PY'
|
|
264
|
+
/tmp/modelaudit-wheel-smoke/bin/python - <<'PY'
|
|
248
265
|
import importlib.metadata as md
|
|
249
266
|
|
|
250
267
|
# Keep these expected URLs in sync with [project.urls] in pyproject.toml.
|
|
@@ -269,10 +286,18 @@ jobs:
|
|
|
269
286
|
print("Project URL metadata validated.")
|
|
270
287
|
PY
|
|
271
288
|
|
|
272
|
-
modelaudit --version
|
|
289
|
+
/tmp/modelaudit-wheel-smoke/bin/modelaudit --version
|
|
290
|
+
|
|
291
|
+
/tmp/modelaudit-wheel-smoke/bin/python - <<'PY'
|
|
292
|
+
import modelaudit_picklescan
|
|
293
|
+
|
|
294
|
+
report = modelaudit_picklescan.scan_bytes(b"\x80\x04}q\x00.")
|
|
295
|
+
assert report.status.value == "complete", report
|
|
296
|
+
print("modelaudit_picklescan import and scan smoke test passed.")
|
|
297
|
+
PY
|
|
273
298
|
|
|
274
299
|
# Basic CLI smoke run from the installed wheel.
|
|
275
|
-
python - <<'PY'
|
|
300
|
+
/tmp/modelaudit-wheel-smoke/bin/python - <<'PY'
|
|
276
301
|
import pathlib
|
|
277
302
|
import pickle
|
|
278
303
|
import subprocess
|
|
@@ -285,7 +310,7 @@ jobs:
|
|
|
285
310
|
pickle.dump({"smoke": True}, f)
|
|
286
311
|
|
|
287
312
|
completed = subprocess.run(
|
|
288
|
-
["modelaudit", str(test_file), "--format", "json"],
|
|
313
|
+
["/tmp/modelaudit-wheel-smoke/bin/modelaudit", str(test_file), "--format", "json"],
|
|
289
314
|
capture_output=True,
|
|
290
315
|
text=True,
|
|
291
316
|
check=False,
|
|
@@ -309,22 +334,30 @@ jobs:
|
|
|
309
334
|
fi
|
|
310
335
|
SDIST_ARTIFACT="${sdist_artifacts[0]}"
|
|
311
336
|
|
|
312
|
-
|
|
313
|
-
source /tmp/modelaudit-sdist-smoke/bin/activate
|
|
337
|
+
uv venv /tmp/modelaudit-sdist-smoke
|
|
314
338
|
|
|
315
|
-
|
|
316
|
-
python -m pip install "${SDIST_ARTIFACT}"
|
|
339
|
+
uv pip install --python /tmp/modelaudit-sdist-smoke/bin/python "${SDIST_ARTIFACT}"
|
|
317
340
|
|
|
318
|
-
INSTALLED_VERSION="$(
|
|
341
|
+
INSTALLED_VERSION="$(
|
|
342
|
+
/tmp/modelaudit-sdist-smoke/bin/python -c "import importlib.metadata as m; print(m.version('modelaudit'))"
|
|
343
|
+
)"
|
|
319
344
|
if [[ "$INSTALLED_VERSION" != "$EXPECTED_VERSION" ]]; then
|
|
320
345
|
echo "ERROR: sdist install version mismatch: expected $EXPECTED_VERSION, got $INSTALLED_VERSION"
|
|
321
346
|
exit 1
|
|
322
347
|
fi
|
|
323
348
|
|
|
324
|
-
modelaudit --version
|
|
349
|
+
/tmp/modelaudit-sdist-smoke/bin/modelaudit --version
|
|
350
|
+
|
|
351
|
+
/tmp/modelaudit-sdist-smoke/bin/python - <<'PY'
|
|
352
|
+
import modelaudit_picklescan
|
|
353
|
+
|
|
354
|
+
report = modelaudit_picklescan.scan_bytes(b"\x80\x04}q\x00.")
|
|
355
|
+
assert report.status.value == "complete", report
|
|
356
|
+
print("modelaudit_picklescan import and scan smoke test passed.")
|
|
357
|
+
PY
|
|
325
358
|
|
|
326
359
|
# Basic CLI smoke run from the installed sdist.
|
|
327
|
-
python - <<'PY'
|
|
360
|
+
/tmp/modelaudit-sdist-smoke/bin/python - <<'PY'
|
|
328
361
|
import pathlib
|
|
329
362
|
import pickle
|
|
330
363
|
import subprocess
|
|
@@ -337,7 +370,7 @@ jobs:
|
|
|
337
370
|
pickle.dump({"smoke": True}, f)
|
|
338
371
|
|
|
339
372
|
completed = subprocess.run(
|
|
340
|
-
["modelaudit", str(test_file), "--format", "json"],
|
|
373
|
+
["/tmp/modelaudit-sdist-smoke/bin/modelaudit", str(test_file), "--format", "json"],
|
|
341
374
|
capture_output=True,
|
|
342
375
|
text=True,
|
|
343
376
|
check=False,
|
|
@@ -354,9 +387,83 @@ jobs:
|
|
|
354
387
|
name: dist
|
|
355
388
|
path: dist/
|
|
356
389
|
|
|
390
|
+
build-picklescan-package:
|
|
391
|
+
if: needs.release-please.outputs.release_created == 'true'
|
|
392
|
+
runs-on: ubuntu-latest
|
|
393
|
+
needs: release-please
|
|
394
|
+
permissions:
|
|
395
|
+
contents: read
|
|
396
|
+
defaults:
|
|
397
|
+
run:
|
|
398
|
+
working-directory: packages/modelaudit-picklescan
|
|
399
|
+
steps:
|
|
400
|
+
- uses: actions/checkout@v6
|
|
401
|
+
|
|
402
|
+
- name: Install uv
|
|
403
|
+
uses: astral-sh/setup-uv@v7
|
|
404
|
+
with:
|
|
405
|
+
enable-cache: true
|
|
406
|
+
|
|
407
|
+
- name: Pin Python version
|
|
408
|
+
run: |
|
|
409
|
+
uv python pin 3.12
|
|
410
|
+
|
|
411
|
+
- name: Check standalone package lock is in sync
|
|
412
|
+
run: |
|
|
413
|
+
uv lock --check
|
|
414
|
+
|
|
415
|
+
- name: Lint standalone package with Ruff
|
|
416
|
+
run: uv run --with ruff ruff check src tests
|
|
417
|
+
|
|
418
|
+
- name: Check standalone package formatting with Ruff
|
|
419
|
+
run: uv run --with ruff ruff format --check src tests
|
|
420
|
+
|
|
421
|
+
- name: Type check standalone package with mypy
|
|
422
|
+
run: uv run --with mypy mypy src tests
|
|
423
|
+
|
|
424
|
+
- name: Run standalone package tests
|
|
425
|
+
run: uv run --with pytest --with pytest-xdist pytest -n auto tests --tb=short
|
|
426
|
+
|
|
427
|
+
- name: Build standalone package
|
|
428
|
+
run: uv build --out-dir /tmp/modelaudit-picklescan-dist
|
|
429
|
+
|
|
430
|
+
- name: Validate standalone package metadata
|
|
431
|
+
run: uvx twine check /tmp/modelaudit-picklescan-dist/*
|
|
432
|
+
|
|
433
|
+
- name: Smoke test standalone package wheel install
|
|
434
|
+
run: |
|
|
435
|
+
set -euo pipefail
|
|
436
|
+
uv venv /tmp/modelaudit-picklescan-wheel-smoke
|
|
437
|
+
|
|
438
|
+
shopt -s nullglob
|
|
439
|
+
picklescan_wheels=(/tmp/modelaudit-picklescan-dist/modelaudit_picklescan-*.whl)
|
|
440
|
+
if [[ ${#picklescan_wheels[@]} -ne 1 ]]; then
|
|
441
|
+
echo "ERROR: Expected exactly 1 modelaudit_picklescan wheel artifact, found ${#picklescan_wheels[@]}"
|
|
442
|
+
ls -la /tmp/modelaudit-picklescan-dist/
|
|
443
|
+
exit 1
|
|
444
|
+
fi
|
|
445
|
+
|
|
446
|
+
uv pip install --python /tmp/modelaudit-picklescan-wheel-smoke/bin/python "${picklescan_wheels[0]}"
|
|
447
|
+
|
|
448
|
+
smoke_dir="$(mktemp -d)"
|
|
449
|
+
(
|
|
450
|
+
cd "$smoke_dir"
|
|
451
|
+
PYTHONPATH= /tmp/modelaudit-picklescan-wheel-smoke/bin/python -I - <<'PY'
|
|
452
|
+
import importlib.util
|
|
453
|
+
|
|
454
|
+
import modelaudit_picklescan
|
|
455
|
+
|
|
456
|
+
assert importlib.util.find_spec("modelaudit") is None
|
|
457
|
+
report = modelaudit_picklescan.scan_bytes(b"\x80\x04}q\x00.")
|
|
458
|
+
assert report.status.value == "complete", report
|
|
459
|
+
assert report.verdict.value == "clean", report
|
|
460
|
+
print("standalone modelaudit_picklescan wheel loaded without modelaudit")
|
|
461
|
+
PY
|
|
462
|
+
)
|
|
463
|
+
|
|
357
464
|
publish-pypi:
|
|
358
465
|
if: needs.release-please.outputs.release_created == 'true'
|
|
359
|
-
needs: [build, release-please]
|
|
466
|
+
needs: [build, build-picklescan-package, release-please]
|
|
360
467
|
runs-on: ubuntu-latest
|
|
361
468
|
environment:
|
|
362
469
|
name: pypi
|
|
@@ -379,7 +486,7 @@ jobs:
|
|
|
379
486
|
|
|
380
487
|
provenance:
|
|
381
488
|
if: needs.release-please.outputs.release_created == 'true'
|
|
382
|
-
needs: [build, publish-pypi, release-please]
|
|
489
|
+
needs: [build, build-picklescan-package, publish-pypi, release-please]
|
|
383
490
|
runs-on: ubuntu-latest
|
|
384
491
|
permissions:
|
|
385
492
|
contents: write
|
|
@@ -28,6 +28,7 @@ jobs:
|
|
|
28
28
|
runs-on: ubuntu-latest
|
|
29
29
|
outputs:
|
|
30
30
|
python: ${{ steps.filter.outputs.python }}
|
|
31
|
+
picklescan: ${{ steps.filter.outputs.picklescan }}
|
|
31
32
|
docker: ${{ steps.filter.outputs.docker }}
|
|
32
33
|
workflows: ${{ steps.filter.outputs.workflows }}
|
|
33
34
|
dependencies: ${{ steps.filter.outputs.dependencies }}
|
|
@@ -41,6 +42,8 @@ jobs:
|
|
|
41
42
|
- '**.py'
|
|
42
43
|
- 'pyproject.toml'
|
|
43
44
|
- 'uv.lock'
|
|
45
|
+
picklescan:
|
|
46
|
+
- 'packages/modelaudit-picklescan/**'
|
|
44
47
|
docker:
|
|
45
48
|
- 'Dockerfile*'
|
|
46
49
|
- '.dockerignore'
|
|
@@ -370,7 +373,7 @@ jobs:
|
|
|
370
373
|
|
|
371
374
|
- name: Run fast tests with fail-fast
|
|
372
375
|
run: |
|
|
373
|
-
uv run pytest -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --tb=short --durations=10
|
|
376
|
+
uv run pytest tests -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --tb=short --durations=10
|
|
374
377
|
|
|
375
378
|
windows-tests:
|
|
376
379
|
name: Windows Tests (Python 3.11)
|
|
@@ -395,7 +398,7 @@ jobs:
|
|
|
395
398
|
|
|
396
399
|
- name: Run fast tests with fail-fast
|
|
397
400
|
run: |
|
|
398
|
-
uv run pytest -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --tb=short --durations=10
|
|
401
|
+
uv run pytest tests -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --tb=short --durations=10
|
|
399
402
|
|
|
400
403
|
test:
|
|
401
404
|
name: Test Python ${{ matrix.python-version }}
|
|
@@ -443,12 +446,12 @@ jobs:
|
|
|
443
446
|
- name: Run fast tests with fail-fast (PRs, Python 3.12 with coverage)
|
|
444
447
|
if: github.event_name == 'pull_request' && matrix.python-version == '3.12'
|
|
445
448
|
run: |
|
|
446
|
-
uv run pytest -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --cov=modelaudit --cov-report=xml --tb=short --durations=15
|
|
449
|
+
uv run pytest tests -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --cov=modelaudit --cov-report=xml --tb=short --durations=15
|
|
447
450
|
|
|
448
451
|
- name: Run fast tests with fail-fast (PRs, non-3.12)
|
|
449
452
|
if: github.event_name == 'pull_request' && matrix.python-version != '3.12'
|
|
450
453
|
run: |
|
|
451
|
-
uv run pytest -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --tb=short --durations=15
|
|
454
|
+
uv run pytest tests -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --tb=short --durations=15
|
|
452
455
|
|
|
453
456
|
- name: Run slow/integration tests on PR (if labeled)
|
|
454
457
|
# Run slow tests on PRs when the 'run-slow-tests' label is added
|
|
@@ -457,17 +460,17 @@ jobs:
|
|
|
457
460
|
timeout-minutes: 20
|
|
458
461
|
run: |
|
|
459
462
|
echo "Running slow/integration tests due to 'run-slow-tests' label"
|
|
460
|
-
uv run pytest -n auto -m "slow or integration or performance" --tb=short --durations=20
|
|
463
|
+
uv run pytest tests -n auto -m "slow or integration or performance" --tb=short --durations=20
|
|
461
464
|
|
|
462
465
|
- name: Run fast tests with coverage (main branch only)
|
|
463
466
|
if: github.ref == 'refs/heads/main' && matrix.python-version == '3.12'
|
|
464
467
|
run: |
|
|
465
|
-
uv run pytest -n auto -m "not slow and not integration and not performance" --cov=modelaudit --cov-report=xml --tb=short --durations=15
|
|
468
|
+
uv run pytest tests -n auto -m "not slow and not integration and not performance" --cov=modelaudit --cov-report=xml --tb=short --durations=15
|
|
466
469
|
|
|
467
470
|
- name: Run fast tests without coverage (main branch, non-3.12)
|
|
468
471
|
if: github.ref == 'refs/heads/main' && matrix.python-version != '3.12'
|
|
469
472
|
run: |
|
|
470
|
-
uv run pytest -n auto -m "not slow and not integration and not performance" --tb=short --durations=15
|
|
473
|
+
uv run pytest tests -n auto -m "not slow and not integration and not performance" --tb=short --durations=15
|
|
471
474
|
|
|
472
475
|
- name: Run slow/integration tests (main branch only)
|
|
473
476
|
# Run ALL slow/integration/performance tests on main branch.
|
|
@@ -477,7 +480,7 @@ jobs:
|
|
|
477
480
|
timeout-minutes: 20
|
|
478
481
|
run: |
|
|
479
482
|
# Run all slow, integration, and performance tests
|
|
480
|
-
uv run pytest -n auto -m "slow or integration or performance" --tb=short --durations=20
|
|
483
|
+
uv run pytest tests -n auto -m "slow or integration or performance" --tb=short --durations=20
|
|
481
484
|
|
|
482
485
|
- name: Upload coverage to Codecov
|
|
483
486
|
if: matrix.python-version == '3.12'
|
|
@@ -713,8 +716,8 @@ jobs:
|
|
|
713
716
|
build:
|
|
714
717
|
name: Build and Package
|
|
715
718
|
needs: changes
|
|
716
|
-
# Always build on main, otherwise only if Python files changed
|
|
717
|
-
if: github.ref == 'refs/heads/main' || needs.changes.outputs.python == 'true' || needs.changes.outputs.dependencies == 'true'
|
|
719
|
+
# Always build on main, otherwise only if Python/dependency/workflow files changed
|
|
720
|
+
if: github.ref == 'refs/heads/main' || needs.changes.outputs.python == 'true' || needs.changes.outputs.dependencies == 'true' || needs.changes.outputs.workflows == 'true'
|
|
718
721
|
runs-on: ubuntu-latest
|
|
719
722
|
timeout-minutes: 10
|
|
720
723
|
steps:
|
|
@@ -754,12 +757,117 @@ jobs:
|
|
|
754
757
|
run: |
|
|
755
758
|
uvx twine check dist/*
|
|
756
759
|
|
|
760
|
+
- name: Smoke test wheel install
|
|
761
|
+
run: |
|
|
762
|
+
set -euo pipefail
|
|
763
|
+
uv venv /tmp/modelaudit-wheel-smoke
|
|
764
|
+
|
|
765
|
+
uv pip install --python /tmp/modelaudit-wheel-smoke/bin/python dist/modelaudit-*.whl
|
|
766
|
+
|
|
767
|
+
smoke_dir="$(mktemp -d)"
|
|
768
|
+
(
|
|
769
|
+
cd "$smoke_dir"
|
|
770
|
+
PYTHONPATH= /tmp/modelaudit-wheel-smoke/bin/python -I - <<'PY'
|
|
771
|
+
import modelaudit
|
|
772
|
+
import modelaudit_picklescan
|
|
773
|
+
|
|
774
|
+
report = modelaudit_picklescan.scan_bytes(b"\x80\x04}q\x00.")
|
|
775
|
+
assert report.status.value == "complete", report
|
|
776
|
+
print(f"modelaudit {modelaudit.__version__} and modelaudit_picklescan loaded")
|
|
777
|
+
PY
|
|
778
|
+
)
|
|
779
|
+
|
|
757
780
|
- name: Upload artifacts
|
|
758
781
|
uses: actions/upload-artifact@v7
|
|
759
782
|
with:
|
|
760
783
|
name: dist
|
|
761
784
|
path: dist/
|
|
762
785
|
|
|
786
|
+
picklescan-package:
|
|
787
|
+
name: Standalone Pickle Package
|
|
788
|
+
needs: changes
|
|
789
|
+
if: github.ref == 'refs/heads/main' || needs.changes.outputs.picklescan == 'true' || needs.changes.outputs.workflows == 'true'
|
|
790
|
+
runs-on: ubuntu-latest
|
|
791
|
+
timeout-minutes: 15
|
|
792
|
+
defaults:
|
|
793
|
+
run:
|
|
794
|
+
working-directory: packages/modelaudit-picklescan
|
|
795
|
+
steps:
|
|
796
|
+
- name: Checkout repo
|
|
797
|
+
uses: actions/checkout@v6
|
|
798
|
+
|
|
799
|
+
- name: Install uv
|
|
800
|
+
uses: astral-sh/setup-uv@v7
|
|
801
|
+
with:
|
|
802
|
+
enable-cache: true
|
|
803
|
+
|
|
804
|
+
- name: Pin Python version
|
|
805
|
+
run: |
|
|
806
|
+
uv python pin 3.12
|
|
807
|
+
|
|
808
|
+
- name: Check standalone package lock is in sync
|
|
809
|
+
run: |
|
|
810
|
+
uv lock --check
|
|
811
|
+
|
|
812
|
+
- name: Lint standalone package with Ruff
|
|
813
|
+
run: |
|
|
814
|
+
uv run --with ruff ruff check src tests
|
|
815
|
+
|
|
816
|
+
- name: Check standalone package import organization with Ruff
|
|
817
|
+
run: |
|
|
818
|
+
uv run --with ruff ruff check --select I src tests
|
|
819
|
+
|
|
820
|
+
- name: Check standalone package formatting with Ruff
|
|
821
|
+
run: |
|
|
822
|
+
uv run --with ruff ruff format --check src tests
|
|
823
|
+
|
|
824
|
+
- name: Type check standalone package with mypy
|
|
825
|
+
run: |
|
|
826
|
+
uv run --with mypy mypy src tests
|
|
827
|
+
|
|
828
|
+
- name: Run standalone package tests
|
|
829
|
+
run: |
|
|
830
|
+
uv run --with pytest --with pytest-xdist pytest -n auto tests --tb=short
|
|
831
|
+
|
|
832
|
+
- name: Build standalone package
|
|
833
|
+
run: |
|
|
834
|
+
uv build --out-dir /tmp/modelaudit-picklescan-dist
|
|
835
|
+
|
|
836
|
+
- name: Validate standalone package metadata
|
|
837
|
+
run: |
|
|
838
|
+
uvx twine check /tmp/modelaudit-picklescan-dist/*
|
|
839
|
+
|
|
840
|
+
- name: Smoke test standalone package wheel install
|
|
841
|
+
run: |
|
|
842
|
+
set -euo pipefail
|
|
843
|
+
uv venv /tmp/modelaudit-picklescan-wheel-smoke
|
|
844
|
+
|
|
845
|
+
shopt -s nullglob
|
|
846
|
+
picklescan_wheels=(/tmp/modelaudit-picklescan-dist/modelaudit_picklescan-*.whl)
|
|
847
|
+
if [[ ${#picklescan_wheels[@]} -ne 1 ]]; then
|
|
848
|
+
echo "ERROR: Expected exactly 1 modelaudit_picklescan wheel artifact, found ${#picklescan_wheels[@]}"
|
|
849
|
+
ls -la /tmp/modelaudit-picklescan-dist/
|
|
850
|
+
exit 1
|
|
851
|
+
fi
|
|
852
|
+
|
|
853
|
+
uv pip install --python /tmp/modelaudit-picklescan-wheel-smoke/bin/python "${picklescan_wheels[0]}"
|
|
854
|
+
|
|
855
|
+
smoke_dir="$(mktemp -d)"
|
|
856
|
+
(
|
|
857
|
+
cd "$smoke_dir"
|
|
858
|
+
PYTHONPATH= /tmp/modelaudit-picklescan-wheel-smoke/bin/python -I - <<'PY'
|
|
859
|
+
import importlib.util
|
|
860
|
+
|
|
861
|
+
import modelaudit_picklescan
|
|
862
|
+
|
|
863
|
+
assert importlib.util.find_spec("modelaudit") is None
|
|
864
|
+
report = modelaudit_picklescan.scan_bytes(b"\x80\x04}q\x00.")
|
|
865
|
+
assert report.status.value == "complete", report
|
|
866
|
+
assert report.verdict.value == "clean", report
|
|
867
|
+
print("standalone modelaudit_picklescan wheel loaded without modelaudit")
|
|
868
|
+
PY
|
|
869
|
+
)
|
|
870
|
+
|
|
763
871
|
# Summary job to ensure all required checks pass
|
|
764
872
|
ci-success:
|
|
765
873
|
name: CI Success
|
|
@@ -779,6 +887,7 @@ jobs:
|
|
|
779
887
|
test-proto-reproducibility,
|
|
780
888
|
test-extras-smoke,
|
|
781
889
|
build,
|
|
890
|
+
picklescan-package,
|
|
782
891
|
]
|
|
783
892
|
if: always()
|
|
784
893
|
runs-on: ubuntu-latest
|
|
@@ -800,12 +909,15 @@ jobs:
|
|
|
800
909
|
PROTO_REPRO_RESULT="${{ needs.test-proto-reproducibility.result }}"
|
|
801
910
|
EXTRAS_RESULT="${{ needs.test-extras-smoke.result }}"
|
|
802
911
|
BUILD_RESULT="${{ needs.build.result }}"
|
|
912
|
+
PICKLESCAN_RESULT="${{ needs.picklescan-package.result }}"
|
|
803
913
|
CHANGES_RESULT="${{ needs.changes.result }}"
|
|
804
914
|
|
|
805
915
|
# Check if conditional jobs should have run
|
|
806
916
|
ON_MAIN_BRANCH="${{ github.ref == 'refs/heads/main' }}"
|
|
807
917
|
DEPENDENCIES_CHANGED="${{ needs.changes.outputs.dependencies == 'true' }}"
|
|
918
|
+
PICKLESCAN_CHANGED="${{ needs.changes.outputs.picklescan == 'true' }}"
|
|
808
919
|
PYTHON_CHANGED="${{ needs.changes.outputs.python == 'true' }}"
|
|
920
|
+
WORKFLOWS_CHANGED="${{ needs.changes.outputs.workflows == 'true' }}"
|
|
809
921
|
echo "Job results:"
|
|
810
922
|
echo " quick-feedback: $QUICK_FEEDBACK_RESULT"
|
|
811
923
|
echo " lint: $LINT_RESULT"
|
|
@@ -820,6 +932,7 @@ jobs:
|
|
|
820
932
|
echo " test-proto-reproducibility: $PROTO_REPRO_RESULT"
|
|
821
933
|
echo " test-extras-smoke: $EXTRAS_RESULT"
|
|
822
934
|
echo " build: $BUILD_RESULT"
|
|
935
|
+
echo " picklescan-package: $PICKLESCAN_RESULT"
|
|
823
936
|
echo " changes: $CHANGES_RESULT"
|
|
824
937
|
|
|
825
938
|
# Check if any job failed or was cancelled
|
|
@@ -836,7 +949,7 @@ jobs:
|
|
|
836
949
|
|
|
837
950
|
# Conditional jobs: only fail if they should have run
|
|
838
951
|
# License/lock checks run on main or when dependencies change
|
|
839
|
-
if [[ "$ON_MAIN_BRANCH" == "true" || "$DEPENDENCIES_CHANGED" == "true" ]]; then
|
|
952
|
+
if [[ "$ON_MAIN_BRANCH" == "true" || "$DEPENDENCIES_CHANGED" == "true" || "$WORKFLOWS_CHANGED" == "true" ]]; then
|
|
840
953
|
[[ "$LICENSE_RESULT" == "failure" || "$LICENSE_RESULT" == "cancelled" ]] && FAILED=true
|
|
841
954
|
[[ "$UV_LOCK_RESULT" == "failure" || "$UV_LOCK_RESULT" == "cancelled" ]] && FAILED=true
|
|
842
955
|
[[ "$NUMPY_RESULT" == "failure" || "$NUMPY_RESULT" == "cancelled" ]] && FAILED=true
|
|
@@ -844,11 +957,15 @@ jobs:
|
|
|
844
957
|
fi
|
|
845
958
|
|
|
846
959
|
# Vendored protos jobs run on main or when python/dependencies change
|
|
847
|
-
if [[ "$ON_MAIN_BRANCH" == "true" || "$PYTHON_CHANGED" == "true" || "$DEPENDENCIES_CHANGED" == "true" ]]; then
|
|
960
|
+
if [[ "$ON_MAIN_BRANCH" == "true" || "$PYTHON_CHANGED" == "true" || "$DEPENDENCIES_CHANGED" == "true" || "$WORKFLOWS_CHANGED" == "true" ]]; then
|
|
848
961
|
[[ "$PROTOS_RESULT" == "failure" || "$PROTOS_RESULT" == "cancelled" ]] && FAILED=true
|
|
849
962
|
[[ "$PROTO_REPRO_RESULT" == "failure" || "$PROTO_REPRO_RESULT" == "cancelled" ]] && FAILED=true
|
|
850
963
|
fi
|
|
851
964
|
|
|
965
|
+
if [[ "$ON_MAIN_BRANCH" == "true" || "$PICKLESCAN_CHANGED" == "true" || "$WORKFLOWS_CHANGED" == "true" ]]; then
|
|
966
|
+
[[ "$PICKLESCAN_RESULT" == "failure" || "$PICKLESCAN_RESULT" == "cancelled" ]] && FAILED=true
|
|
967
|
+
fi
|
|
968
|
+
|
|
852
969
|
if [[ "$FAILED" == "true" ]]; then
|
|
853
970
|
echo "Some CI checks failed!"
|
|
854
971
|
exit 1
|
|
@@ -25,9 +25,9 @@ This is the single source of truth for all AI coding agents (Claude, Gemini, oth
|
|
|
25
25
|
uv sync --extra all-ci
|
|
26
26
|
|
|
27
27
|
# Pre-commit workflow (MUST run before every commit)
|
|
28
|
-
uv run ruff format modelaudit/ tests/
|
|
29
|
-
uv run ruff check --fix modelaudit/ tests/
|
|
30
|
-
uv run mypy modelaudit/ tests/
|
|
28
|
+
uv run ruff format modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/
|
|
29
|
+
uv run ruff check --fix modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/
|
|
30
|
+
uv run mypy modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/
|
|
31
31
|
uv run pytest -n auto -m "not slow and not integration" --maxfail=1
|
|
32
32
|
```
|
|
33
33
|
|
|
@@ -36,7 +36,7 @@ uv run pytest -n auto -m "not slow and not integration" --maxfail=1
|
|
|
36
36
|
1. **Understand:** Read nearby code, tests, and docs (`docs/agents/*.md`) before editing.
|
|
37
37
|
2. **Plan:** For anything non-trivial, present a short multi-step plan; refine iteratively.
|
|
38
38
|
3. **Implement:** Preserve security focus, follow `BaseScanner` patterns (see `docs/agents/architecture.md`), handle missing deps gracefully, and update `SCANNER_REGISTRY` when adding scanners.
|
|
39
|
-
4. **Verify:** Run the validation commands above. Format/linters must be clean. Use targeted `pytest` when appropriate, and type-check modified tests as part of the normal `mypy modelaudit/ tests/` pass.
|
|
39
|
+
4. **Verify:** Run the validation commands above. Format/linters must be clean. Use targeted `pytest` when appropriate, and type-check modified tests as part of the normal `mypy modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/` pass.
|
|
40
40
|
5. **Report:** Summarize changes with file references and note residual risks or follow-ups.
|
|
41
41
|
|
|
42
42
|
## Branch & Git Hygiene
|
|
@@ -71,18 +71,18 @@ gh pr create --title "feat: descriptive title" --body "Brief description"
|
|
|
71
71
|
## CI Compliance Requirements
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
|
-
uv run ruff check modelaudit/ tests/ # Lint (no errors)
|
|
75
|
-
uv run ruff format --check modelaudit/ tests/ # Format (no changes)
|
|
76
|
-
uv run mypy modelaudit/ tests/ # Types (no errors)
|
|
74
|
+
uv run ruff check modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/ # Lint (no errors)
|
|
75
|
+
uv run ruff format --check modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/ # Format (no changes)
|
|
76
|
+
uv run mypy modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/ # Types (no errors)
|
|
77
77
|
uv run pytest -n auto -m "not slow and not integration" --maxfail=1
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
-
| Issue | Fix
|
|
81
|
-
| ------------------- |
|
|
82
|
-
| Import organization | `uv run ruff check --fix --select I modelaudit/ tests/` |
|
|
83
|
-
| Format issues | `uv run ruff format modelaudit/ tests/` |
|
|
84
|
-
| Type errors | Fix manually, re-run `mypy`
|
|
85
|
-
| Test failures | Check output, fix issues, re-run tests
|
|
80
|
+
| Issue | Fix |
|
|
81
|
+
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
|
82
|
+
| Import organization | `uv run ruff check --fix --select I modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/` |
|
|
83
|
+
| Format issues | `uv run ruff format modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/` |
|
|
84
|
+
| Type errors | Fix manually, re-run `mypy` |
|
|
85
|
+
| Test failures | Check output, fix issues, re-run tests |
|
|
86
86
|
|
|
87
87
|
## Dependency Management
|
|
88
88
|
|
|
@@ -159,6 +159,7 @@ For the full multi-file workflow, see `docs/agents/new-scanner-quickstart.md` §
|
|
|
159
159
|
|
|
160
160
|
```bash
|
|
161
161
|
modelaudit/
|
|
162
|
+
├── packages/modelaudit-picklescan/ # Standalone pickle scanner package
|
|
162
163
|
├── modelaudit/ # Main package
|
|
163
164
|
│ ├── analysis/ # Semantic and integrated analysis
|
|
164
165
|
│ ├── auth/ # API authentication and config
|
|
@@ -5,6 +5,28 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.2.34](https://github.com/promptfoo/modelaudit/compare/v0.2.33...v0.2.34) (2026-04-10)
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
- harden native code detection in model scanners ([#897](https://github.com/promptfoo/modelaudit/issues/897)) ([f4f661a](https://github.com/promptfoo/modelaudit/commit/f4f661a09be0032e15aa8895864413e3878233f8))
|
|
13
|
+
|
|
14
|
+
## [0.2.33](https://github.com/promptfoo/modelaudit/compare/v0.2.32...v0.2.33) (2026-04-09)
|
|
15
|
+
|
|
16
|
+
### Features
|
|
17
|
+
|
|
18
|
+
- extract standalone pickle scanner package with parity harness ([#832](https://github.com/promptfoo/modelaudit/issues/832)) ([e2986cd](https://github.com/promptfoo/modelaudit/commit/e2986cddaa592306cc10541865f011b3dc99a0ba))
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
- harden helper routing for zip-backed pickle checkpoints ([#870](https://github.com/promptfoo/modelaudit/issues/870)) ([3ebe0c0](https://github.com/promptfoo/modelaudit/commit/3ebe0c04f02f51274b9c9588200212ad2cffe70b))
|
|
23
|
+
- make return paths explicit ([#884](https://github.com/promptfoo/modelaudit/issues/884)) ([e31c254](https://github.com/promptfoo/modelaudit/commit/e31c254b820c78278289cf06acdf17f3f81d49b2))
|
|
24
|
+
- skip extraction for suspicious ZIP entries ([358aa44](https://github.com/promptfoo/modelaudit/commit/358aa4498ce9d6a091340c6f23289523f98f3a55))
|
|
25
|
+
|
|
26
|
+
### Documentation
|
|
27
|
+
|
|
28
|
+
- clarify detection bypass severity policy ([d8117a1](https://github.com/promptfoo/modelaudit/commit/d8117a14b4f8ef3e1a93cb1d48eeba8d8af92677))
|
|
29
|
+
|
|
8
30
|
## [0.2.32](https://github.com/promptfoo/modelaudit/compare/v0.2.31...v0.2.32) (2026-04-05)
|
|
9
31
|
|
|
10
32
|
### Bug Fixes
|
|
@@ -20,8 +42,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
20
42
|
### Bug Fixes
|
|
21
43
|
|
|
22
44
|
- avoid CoreML nested parse failures on bounded-read truncation
|
|
45
|
+
- flag TensorFlow `LoadLibrary` and `LoadLibraryV2` graph ops as dangerous native-library loading
|
|
46
|
+
- detect split CNTK native-user-function and native-library references
|
|
47
|
+
- detect Linux/macOS native-library members in Keras archives and uppercase native-library members in PyTorch ZIPs
|
|
48
|
+
- detect embedded Windows DLL/PE, Linux ELF shared-object, and TensorRT plugin entry-point markers in TensorRT engines
|
|
23
49
|
- detect punctuation-delimited TensorRT `/tmp` plugin paths
|
|
50
|
+
- preserve HuggingFace cache provenance for symlinked custom cache roots
|
|
51
|
+
- ignore remote OCI `layers[].urls` entries during local layer discovery
|
|
52
|
+
- fail closed on unterminated OpenVINO DOCTYPE declarations
|
|
24
53
|
- avoid PMML `<Extension>` false positives for benign `subprocess` prose while preserving `subprocess.getoutput()`, `subprocess.getstatusoutput()`, and `importlib.import_module("subprocess")` detections
|
|
54
|
+
- route helper-level ZIP-backed `.ckpt`/`.pkl` checkpoints through archive scanners
|
|
25
55
|
|
|
26
56
|
## [0.2.31](https://github.com/promptfoo/modelaudit/compare/v0.2.30...v0.2.31) (2026-04-04)
|
|
27
57
|
|
|
@@ -153,6 +183,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
153
183
|
|
|
154
184
|
### Added
|
|
155
185
|
|
|
186
|
+
- **pickle:** bundle the standalone `modelaudit_picklescan` API in the root `modelaudit` wheel and add source-tree coverage for the package boundary
|
|
156
187
|
- **tests:** enable existing PaddlePaddle scanner tests in CI by adding `test_paddle_scanner.py` to the allowed test files list (Python 3.10/3.12/3.13)
|
|
157
188
|
- **security:** detect CVE-2026-1669 Keras HDF5 external weight references in standalone `.h5` and embedded `.keras` weights
|
|
158
189
|
- **security:** detect CVE-2026-24747 PyTorch weights_only=True bypass via SETITEM/SETITEMS abuse and tensor metadata mismatch detection
|
|
@@ -179,6 +210,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
179
210
|
- **security:** reduce NeMo Hydra `_target_` false positives by matching suspicious identifiers on token boundaries, preserve CVE-2025-23304 details on suspicious-target findings, and reject oversized YAML members before parsing
|
|
180
211
|
- **security:** detect protocol 0/1 pickle streams with trivial opcode prefixes even when `STOP` is followed by trailing junk, while preserving plain-text near-match rejection
|
|
181
212
|
- **security:** detect protocol 0/1 pickle streams whose dangerous opcode appears after large trivial padding or after a non-trivial probe-boundary prelude, reject all-trivial no-`STOP` probe prefixes, and preserve rule codes across cached scan-result round trips
|
|
213
|
+
- **pickle:** propagate standalone fallback parse and stream-read failures into merged scan success, preserve truncated `.bin` fail-closed behavior, reuse non-seekable stream spools for the legacy parity pass, clamp negative stream sizes, and reset post-budget scan state between reused scanner runs
|
|
182
214
|
- **license:** bound binary header scans and reuse compiled patterns to avoid full-file regex passes on large model archives
|
|
183
215
|
- **security:** stop iterating malformed TFLite models after excessive subgraph counts are detected
|
|
184
216
|
- **openvino:** route forbidden-DOCTYPE IR XML into the OpenVINO scanner, fail closed on XML parse errors, and suppress warning-level format-validation noise for benign `.xml` models with no distinctive magic bytes
|