stubby-vex 0.7.0__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.
- stubby_vex-0.7.0/.gitignore +7 -0
- stubby_vex-0.7.0/CLAUDE.md +45 -0
- stubby_vex-0.7.0/PKG-INFO +88 -0
- stubby_vex-0.7.0/README.md +71 -0
- stubby_vex-0.7.0/benchmarks/.gitignore +3 -0
- stubby_vex-0.7.0/benchmarks/README.md +48 -0
- stubby_vex-0.7.0/benchmarks/cases/django-dependent-clear/case.json +59 -0
- stubby_vex-0.7.0/benchmarks/cases/django-dependent-clear/project/app.py +3 -0
- stubby_vex-0.7.0/benchmarks/cases/django-dependent-clear/project/requirements.txt +8 -0
- stubby_vex-0.7.0/benchmarks/cases/django-dependent-uses-symbol/case.json +59 -0
- stubby_vex-0.7.0/benchmarks/cases/django-dependent-uses-symbol/project/app.py +3 -0
- stubby_vex-0.7.0/benchmarks/cases/django-dependent-uses-symbol/project/requirements.txt +8 -0
- stubby_vex-0.7.0/benchmarks/cases/django-strip-tags/case.json +59 -0
- stubby_vex-0.7.0/benchmarks/cases/django-strip-tags/project/app.py +5 -0
- stubby_vex-0.7.0/benchmarks/cases/django-strip-tags/project/poetry.lock +29 -0
- stubby_vex-0.7.0/benchmarks/cases/django-strip-tags/project/pyproject.toml +9 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-defaultsdeep-other-submodule/case.json +67 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-defaultsdeep-other-submodule/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-defaultsdeep-other-submodule/project/src/wait.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-defaultsdeep-submodule/case.json +66 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-defaultsdeep-submodule/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-defaultsdeep-submodule/project/src/defaults.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-chain-wrapper/case.json +99 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-chain-wrapper/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-chain-wrapper/project/src/app.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-default-import/case.json +98 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-default-import/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-default-import/project/src/set.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-safe-members/case.json +98 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-safe-members/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-safe-members/project/src/read.js +4 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-same-name-on-other-object/case.json +99 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-same-name-on-other-object/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-same-name-on-other-object/project/src/app.js +5 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-whole-module-escape/case.json +98 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-whole-module-escape/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-whole-module-escape/project/src/plugins.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/project/node_modules/mid-lib/index.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/project/node_modules/mid-lib/package.json +1 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/project/node_modules/top-lib/index.js +1 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/project/node_modules/top-lib/package.json +1 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/project/package-lock.json +30 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/project/src/app.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-clear/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-clear/project/node_modules/some-lib/index.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-clear/project/node_modules/some-lib/package.json +1 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-clear/project/package-lock.json +24 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-clear/project/src/app.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-dynamic-require/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-dynamic-require/project/node_modules/some-lib/index.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-dynamic-require/project/node_modules/some-lib/package.json +1 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-dynamic-require/project/package-lock.json +24 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-dynamic-require/project/src/app.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-ships-code-in-dist/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-ships-code-in-dist/project/node_modules/some-lib/dist/index.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-ships-code-in-dist/project/node_modules/some-lib/package.json +1 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-ships-code-in-dist/project/package-lock.json +24 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-ships-code-in-dist/project/src/app.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-uses-symbol/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-uses-symbol/project/node_modules/some-lib/index.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-uses-symbol/project/node_modules/some-lib/package.json +1 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-uses-symbol/project/package-lock.json +24 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-uses-symbol/project/src/app.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-direct-and-dependent/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-direct-and-dependent/project/node_modules/some-lib/index.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-direct-and-dependent/project/node_modules/some-lib/package.json +1 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-direct-and-dependent/project/package-lock.json +25 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-direct-and-dependent/project/src/app.js +4 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dynamic-require/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dynamic-require/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-dynamic-require/project/src/app.js +4 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-hallucinated-symbol/case.json +98 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-hallucinated-symbol/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-hallucinated-symbol/project/src/app.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-multiline-ts/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-multiline-ts/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-multiline-ts/project/src/render.ts +6 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-named-import/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-named-import/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-named-import/project/src/app.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-never-imported/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-never-imported/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-never-imported/project/src/app.js +1 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-other-member/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-other-member/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-other-member/project/src/app.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-reexport/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-reexport/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-reexport/project/src/index.js +1 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-require-destructure/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-require-destructure/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-require-destructure/project/src/app.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-transitive/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-transitive/project/package-lock.json +24 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-transitive/project/src/app.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-type-only-import/case.json +93 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-type-only-import/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/lodash-template-type-only-import/project/src/app.ts +5 -0
- stubby_vex-0.7.0/benchmarks/cases/minimist-callable-module/case.json +86 -0
- stubby_vex-0.7.0/benchmarks/cases/minimist-callable-module/project/package-lock.json +18 -0
- stubby_vex-0.7.0/benchmarks/cases/minimist-callable-module/project/src/cli.js +3 -0
- stubby_vex-0.7.0/benchmarks/cases/pillow-image-only/case.json +71 -0
- stubby_vex-0.7.0/benchmarks/cases/pillow-image-only/project/app.py +5 -0
- stubby_vex-0.7.0/benchmarks/cases/pillow-image-only/project/requirements.txt +1 -0
- stubby_vex-0.7.0/benchmarks/cases/pillow-imagemath-eval/case.json +71 -0
- stubby_vex-0.7.0/benchmarks/cases/pillow-imagemath-eval/project/app.py +5 -0
- stubby_vex-0.7.0/benchmarks/cases/pillow-imagemath-eval/project/requirements.txt +1 -0
- stubby_vex-0.7.0/benchmarks/cases/pillow-submodule-passed-around/case.json +71 -0
- stubby_vex-0.7.0/benchmarks/cases/pillow-submodule-passed-around/project/app.py +3 -0
- stubby_vex-0.7.0/benchmarks/cases/pillow-submodule-passed-around/project/requirements.txt +1 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-dynamic-import/case.json +79 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-dynamic-import/project/app.py +11 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-dynamic-import/project/requirements.txt +1 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-full-load/case.json +79 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-full-load/project/app.py +5 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-full-load/project/requirements.txt +1 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-fullloader-class/case.json +79 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-fullloader-class/project/app.py +5 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-fullloader-class/project/requirements.txt +1 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-no-environment/case.json +80 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-no-environment/project/app.py +5 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-no-environment/project/requirements.txt +1 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-load/case.json +79 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-load/project/app.py +5 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-load/project/poetry.lock +11 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-load/project/pyproject.toml +9 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-names-from-import/case.json +79 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-names-from-import/project/app.py +7 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-names-from-import/project/requirements.txt +1 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-type-checking-import/case.json +79 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-type-checking-import/project/app.py +10 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-type-checking-import/project/requirements.txt +1 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-unresolved-import/case.json +79 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-unresolved-import/project/app.py +6 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-unresolved-import/project/requirements.txt +1 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-whole-module-escape/case.json +79 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-whole-module-escape/project/app.py +3 -0
- stubby_vex-0.7.0/benchmarks/cases/pyyaml-whole-module-escape/project/requirements.txt +1 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-class-for-name/case.json +101 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-class-for-name/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-class-for-name/project/dependency-tree.txt +2 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-class-for-name/project/pom.xml +7 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-class-for-name/project/src/main/java/com/acme/App.java +8 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-not-used/case.json +101 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-not-used/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-not-used/project/dependency-tree.txt +2 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-not-used/project/pom.xml +7 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-not-used/project/src/main/java/com/acme/App.java +10 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-used/case.json +101 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-used/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-used/project/dependency-tree.txt +2 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-used/project/pom.xml +7 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-used/project/src/main/java/com/acme/App.java +10 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-clear/case.json +101 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-clear/project/.m2/repository/com/acme/lib-config/1.0/lib-config-1.0.jar +0 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-clear/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-clear/project/dependency-tree.txt +3 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-clear/project/pom.xml +7 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-clear/project/src/main/java/com/acme/App.java +6 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-reflection/case.json +101 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-reflection/project/.m2/repository/com/acme/lib-config/1.0/lib-config-1.0.jar +0 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-reflection/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-reflection/project/dependency-tree.txt +3 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-reflection/project/pom.xml +7 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-reflection/project/src/main/java/com/acme/App.java +6 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-uses-constructor/case.json +101 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-uses-constructor/project/.m2/repository/com/acme/lib-config/1.0/lib-config-1.0.jar +0 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-uses-constructor/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-uses-constructor/project/dependency-tree.txt +3 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-uses-constructor/project/pom.xml +7 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-uses-constructor/project/src/main/java/com/acme/App.java +6 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-gradle-lockfile/case.json +101 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-gradle-lockfile/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-gradle-lockfile/project/build.gradle +1 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-gradle-lockfile/project/gradle.lockfile +3 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-gradle-lockfile/project/src/main/java/com/acme/App.java +10 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-no-jars/case.json +101 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-no-jars/project/dependency-tree.txt +2 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-no-jars/project/pom.xml +7 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-no-jars/project/src/main/java/com/acme/App.java +9 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-unattributed-method/case.json +106 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-unattributed-method/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-unattributed-method/project/dependency-tree.txt +2 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-unattributed-method/project/pom.xml +7 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-unattributed-method/project/src/main/java/com/acme/App.java +12 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-wildcard-import/case.json +101 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-wildcard-import/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-wildcard-import/project/dependency-tree.txt +2 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-wildcard-import/project/pom.xml +7 -0
- stubby_vex-0.7.0/benchmarks/cases/snakeyaml-wildcard-import/project/src/main/java/com/acme/App.java +9 -0
- stubby_vex-0.7.0/docs/1280px-Sergeant_Stubby.jpg +0 -0
- stubby_vex-0.7.0/docs/Documento de Vis/303/243o.md" +100 -0
- stubby_vex-0.7.0/docs/Sgt_Stubby's_brick_at_Liberty_Memorial.jpg +0 -0
- stubby_vex-0.7.0/docs/architecture.md +189 -0
- stubby_vex-0.7.0/pyproject.toml +32 -0
- stubby_vex-0.7.0/src/stubby/__init__.py +3 -0
- stubby_vex-0.7.0/src/stubby/analyzers/__init__.py +0 -0
- stubby_vex-0.7.0/src/stubby/analyzers/base.py +62 -0
- stubby_vex-0.7.0/src/stubby/analyzers/java.py +326 -0
- stubby_vex-0.7.0/src/stubby/analyzers/java_ast.py +258 -0
- stubby_vex-0.7.0/src/stubby/analyzers/javascript.py +137 -0
- stubby_vex-0.7.0/src/stubby/analyzers/js_ast.py +294 -0
- stubby_vex-0.7.0/src/stubby/analyzers/observations.py +26 -0
- stubby_vex-0.7.0/src/stubby/analyzers/py_ast.py +248 -0
- stubby_vex-0.7.0/src/stubby/analyzers/python.py +272 -0
- stubby_vex-0.7.0/src/stubby/bench.py +164 -0
- stubby_vex-0.7.0/src/stubby/cli.py +154 -0
- stubby_vex-0.7.0/src/stubby/fixes.py +27 -0
- stubby_vex-0.7.0/src/stubby/graph.py +57 -0
- stubby_vex-0.7.0/src/stubby/jars.py +142 -0
- stubby_vex-0.7.0/src/stubby/llm/__init__.py +0 -0
- stubby_vex-0.7.0/src/stubby/llm/base.py +23 -0
- stubby_vex-0.7.0/src/stubby/llm/openai.py +55 -0
- stubby_vex-0.7.0/src/stubby/lockfiles/__init__.py +0 -0
- stubby_vex-0.7.0/src/stubby/lockfiles/java.py +157 -0
- stubby_vex-0.7.0/src/stubby/lockfiles/npm.py +116 -0
- stubby_vex-0.7.0/src/stubby/lockfiles/python.py +165 -0
- stubby_vex-0.7.0/src/stubby/models.py +75 -0
- stubby_vex-0.7.0/src/stubby/osv.py +87 -0
- stubby_vex-0.7.0/src/stubby/pyenv.py +137 -0
- stubby_vex-0.7.0/src/stubby/scan.py +334 -0
- stubby_vex-0.7.0/src/stubby/symbols.py +170 -0
- stubby_vex-0.7.0/src/stubby/vex.py +69 -0
- stubby_vex-0.7.0/tests/fixtures/.gitignore +1 -0
- stubby_vex-0.7.0/tests/fixtures/sample-js/node_modules/ignored/index.js +1 -0
- stubby_vex-0.7.0/tests/fixtures/sample-js/package-lock.json +22 -0
- stubby_vex-0.7.0/tests/fixtures/sample-js/src/index.ts +7 -0
- stubby_vex-0.7.0/tests/test_benchmark.py +79 -0
- stubby_vex-0.7.0/tests/test_cli.py +54 -0
- stubby_vex-0.7.0/tests/test_graph.py +149 -0
- stubby_vex-0.7.0/tests/test_java.py +205 -0
- stubby_vex-0.7.0/tests/test_javascript_edge_cases.py +57 -0
- stubby_vex-0.7.0/tests/test_js_ast.py +137 -0
- stubby_vex-0.7.0/tests/test_osv.py +61 -0
- stubby_vex-0.7.0/tests/test_pipeline.py +78 -0
- stubby_vex-0.7.0/tests/test_python.py +272 -0
- stubby_vex-0.7.0/tests/test_symbols.py +152 -0
- stubby_vex-0.7.0/tests/test_verdicts.py +150 -0
- stubby_vex-0.7.0/tests/test_vex.py +58 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project
|
|
6
|
+
|
|
7
|
+
`stubby` (named after Sergeant Stubby, the WWI dog) checks whether project code can actually reach vulnerable dependency code and writes the result as an [OpenVEX](https://openvex.dev) document. Early MVP (v0.1): JS/TS projects with an npm `package-lock.json`, import-level analysis only. See README.md for the roadmap.
|
|
8
|
+
|
|
9
|
+
## Commands
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pip install -e ".[dev]" # install with pytest
|
|
13
|
+
pytest # all tests (testpaths = tests)
|
|
14
|
+
pytest tests/test_pipeline.py::test_vex_document_shape # single test
|
|
15
|
+
stubby scan path/to/js-project -o vex.json # needs network (api.osv.dev)
|
|
16
|
+
stubby bench # benchmark (offline); exit 1 on a false not_affected
|
|
17
|
+
stubby scan . --site-packages .venv/lib/python3.12/site-packages # Python: inspect this environment
|
|
18
|
+
stubby scan . --repository ~/.m2/repository # Java: where the dependency jars live
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
No linter or formatter is configured. Python >= 3.10, hatchling build, runtime dependencies are `httpx`, tree-sitter and its JS/TS/Python/Java grammars.
|
|
22
|
+
|
|
23
|
+
## Documentation
|
|
24
|
+
|
|
25
|
+
README.md is the public showcase of the open-source project: keep it short and clean. Architecture, design principles and limitations live in `docs/architecture.md`; the product vision is in `docs/`.
|
|
26
|
+
|
|
27
|
+
## Architecture
|
|
28
|
+
|
|
29
|
+
Pipeline orchestrated by `scan.scan_project`: lockfile -> dependencies -> OSV.dev lookup -> vulnerabilities -> per-finding assessment against detected imports -> OpenVEX (`vex.build_vex`).
|
|
30
|
+
|
|
31
|
+
- **Language adapters** (`analyzers/base.py`, `LanguageAdapter` Protocol): one per ecosystem, providing `detect`, `load_dependencies` (name, version, deps) and `analyze` (returns a `UsageReport`: `Evidence` per package plus unattributable `dynamic` sites). `scan.ADAPTERS` is the registry; the first adapter whose `detect` matches wins. Adding a language = implement the protocol and register it there.
|
|
32
|
+
- **`analyzers/python.py`** (+ `py_ast.py`, `pyenv.py`, `lockfiles/python.py`) is the Python adapter: modules map to distributions via an installed environment's `RECORD`; unattributable imports count as dynamic code. Details in `docs/architecture.md`. **`analyzers/java.py`** (+ `java_ast.py`, `jars.py`, `lockfiles/java.py`) is the Java adapter: classes map to Maven artifacts through downloaded jars and dependents are read from class-file constant pools. **`analyzers/javascript.py`** walks source files (skipping `node_modules`, `dist`, `build`, etc. and `.d.ts`); **`analyzers/js_ast.py`** does the per-file tree-sitter analysis (imports, bound members, call/ref sites, dynamic `require`/`import()`/`eval`). Files with syntax errors also get a regex fallback so imports are never lost. Scoping is ignored on purpose (over-reports, never hides usage).
|
|
33
|
+
- **`models.py`**: shared dataclasses (`Dependency`, `Vulnerability`, `Evidence`, `Finding`) and the `Verdict` enum. `Dependency.purl` builds the package URL used in VEX output.
|
|
34
|
+
- **`symbols.py`** (+ `fixes.py`, `llm/`): optional (`--llm openai`) extraction of vulnerable symbols; the LLM only proposes, each symbol needs a verbatim advisory/diff quote or it is dropped. Only advisory data is sent, never project code.
|
|
35
|
+
|
|
36
|
+
## Behavior to preserve
|
|
37
|
+
|
|
38
|
+
- `scan._assess` yields `INCONCLUSIVE` unless validated vulnerable symbols exist; `NOT_AFFECTED` additionally needs high confidence, a direct imported dep, no dynamic code and no opaque whole-module use (README design principle: never give false comfort; `not_affected` requires cited evidence). Tests in `tests/test_verdicts.py` cover each blocking condition, and `test_scan_never_concludes_not_affected_in_v01` covers the no-LLM path. Direct-but-never-imported deps are only noted as candidates in `notes`.
|
|
39
|
+
- Transitive dependencies (`Dependency.direct = False`) are judged through the installed code of the packages that require them (`graph.py`, `scan._collect_dependents`): never `affected`, `not_affected` only if every dependent is installed, fully analysed and clear. Direct dependencies are held to the same check for their dependents.
|
|
40
|
+
|
|
41
|
+
## Testing
|
|
42
|
+
|
|
43
|
+
`benchmarks/cases/` holds real-advisory cases (see `benchmarks/README.md`); `tests/test_benchmark.py` runs them and fails on any false `not_affected` or when a `known_gap` case starts passing. Add a case when changing verdict logic.
|
|
44
|
+
|
|
45
|
+
`tests/test_pipeline.py` uses a `FakeOSV` class in place of `OSVClient` (pass via `scan_project(..., osv=...)`) so tests need no network. Fixture project lives in `tests/fixtures/sample-js/` (including an ignored `node_modules` dir used to verify skipping).
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: stubby-vex
|
|
3
|
+
Version: 0.7.0
|
|
4
|
+
Summary: Reachability analysis for vulnerable dependencies, with OpenVEX output.
|
|
5
|
+
License: Apache-2.0
|
|
6
|
+
Requires-Python: >=3.10
|
|
7
|
+
Requires-Dist: httpx>=0.27
|
|
8
|
+
Requires-Dist: tomli>=2; python_version < '3.11'
|
|
9
|
+
Requires-Dist: tree-sitter-java>=0.23
|
|
10
|
+
Requires-Dist: tree-sitter-javascript>=0.23
|
|
11
|
+
Requires-Dist: tree-sitter-python>=0.23
|
|
12
|
+
Requires-Dist: tree-sitter-typescript>=0.23
|
|
13
|
+
Requires-Dist: tree-sitter>=0.23
|
|
14
|
+
Provides-Extra: dev
|
|
15
|
+
Requires-Dist: pytest>=8; extra == 'dev'
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
|
|
18
|
+
# stubby
|
|
19
|
+
|
|
20
|
+
Most vulnerability scanners tell you *"dependency X has CVE-Y"*. Few tell you
|
|
21
|
+
whether **your code can actually reach the vulnerable code**. Stubby answers
|
|
22
|
+
that question and records the answer as an [OpenVEX](https://openvex.dev)
|
|
23
|
+
document you can review, version and share.
|
|
24
|
+
|
|
25
|
+
> **Early MVP (v0.7).** JS/TS projects (npm `package-lock.json`), Python projects
|
|
26
|
+
> (`poetry.lock` or pinned `requirements.txt`) and Java projects (Maven `pom.xml`
|
|
27
|
+
> or Gradle `gradle.lockfile`). Verdicts
|
|
28
|
+
> are drafts for human review. Without `--llm`, findings are reported as
|
|
29
|
+
> `under_investigation`.
|
|
30
|
+
|
|
31
|
+
## Quick start
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pip install -e .
|
|
35
|
+
|
|
36
|
+
stubby scan path/to/js-project -o vex.json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Requires network access to `api.osv.dev`. Install your dependencies first (`npm install`, a `.venv` for Python, or `mvn dependency:tree` and `mvn dependency:resolve` for Java) so Stubby can also inspect the packages that depend on a vulnerable one. To also identify which function of
|
|
40
|
+
each package is vulnerable, add `--llm openai` (reads `OPENAI_API_KEY`). Only
|
|
41
|
+
public advisory text and fix diffs are sent, never your code. Example output:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
lodash@4.17.15 CVE-2020-8203 inconclusive imported in 3 file(s); members used: merge, template; 4 call site(s); vulnerable symbol not identified yet
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Why
|
|
48
|
+
|
|
49
|
+
- Scanners produce hundreds of alerts, most of them irrelevant to how a project
|
|
50
|
+
uses a library.
|
|
51
|
+
- Regulation (e.g. the EU Cyber Resilience Act) increasingly asks for VEX
|
|
52
|
+
statements, and almost nobody generates them automatically.
|
|
53
|
+
- Advisories rarely say *which function* is dangerous in a structured way.
|
|
54
|
+
|
|
55
|
+
## How it works
|
|
56
|
+
|
|
57
|
+
Stubby reads your lockfile, looks up known vulnerabilities on
|
|
58
|
+
[OSV.dev](https://osv.dev), and checks how your code uses each affected
|
|
59
|
+
package. Every verdict (`affected`, `not_affected` or `inconclusive`) cites file
|
|
60
|
+
and line, and the output is a draft for human review, never a guarantee. See
|
|
61
|
+
[docs/architecture.md](docs/architecture.md) for details.
|
|
62
|
+
|
|
63
|
+
## Roadmap
|
|
64
|
+
|
|
65
|
+
- [x] v0.1 – npm lockfile, OSV lookup, import-level detection, OpenVEX output
|
|
66
|
+
- [x] v0.2 – tree-sitter based JS/TS analysis (named imports, call sites)
|
|
67
|
+
- [x] v0.3 – LLM symbol extraction from advisory text and fix-commit diff
|
|
68
|
+
- [x] v0.4 – benchmark suite (known CVEs, expected verdicts)
|
|
69
|
+
- [x] v0.5 – transitive dependencies
|
|
70
|
+
- [x] v0.6 – Python adapter
|
|
71
|
+
- [x] v0.7 – Java adapter
|
|
72
|
+
|
|
73
|
+
## Why "Stubby"?
|
|
74
|
+
|
|
75
|
+
Named after [Sergeant Stubby](https://pt.wikipedia.org/wiki/Stubby), the dog who
|
|
76
|
+
served with the US 102nd Infantry Regiment in World War I. He is remembered for
|
|
77
|
+
sensing danger, such as incoming gas attacks, before the soldiers did. The tool
|
|
78
|
+
aims to do the same for your dependencies: raise the alarm only for the
|
|
79
|
+
vulnerabilities that can actually reach your code.
|
|
80
|
+
|
|
81
|
+
## Contributing
|
|
82
|
+
|
|
83
|
+
Benchmark cases (a real CVE, a small project, the expected verdict) are the
|
|
84
|
+
most valuable contribution; see [benchmarks/](benchmarks/README.md). Open an issue to discuss before large changes.
|
|
85
|
+
|
|
86
|
+
## License
|
|
87
|
+
|
|
88
|
+
Apache-2.0
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# stubby
|
|
2
|
+
|
|
3
|
+
Most vulnerability scanners tell you *"dependency X has CVE-Y"*. Few tell you
|
|
4
|
+
whether **your code can actually reach the vulnerable code**. Stubby answers
|
|
5
|
+
that question and records the answer as an [OpenVEX](https://openvex.dev)
|
|
6
|
+
document you can review, version and share.
|
|
7
|
+
|
|
8
|
+
> **Early MVP (v0.7).** JS/TS projects (npm `package-lock.json`), Python projects
|
|
9
|
+
> (`poetry.lock` or pinned `requirements.txt`) and Java projects (Maven `pom.xml`
|
|
10
|
+
> or Gradle `gradle.lockfile`). Verdicts
|
|
11
|
+
> are drafts for human review. Without `--llm`, findings are reported as
|
|
12
|
+
> `under_investigation`.
|
|
13
|
+
|
|
14
|
+
## Quick start
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pip install -e .
|
|
18
|
+
|
|
19
|
+
stubby scan path/to/js-project -o vex.json
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Requires network access to `api.osv.dev`. Install your dependencies first (`npm install`, a `.venv` for Python, or `mvn dependency:tree` and `mvn dependency:resolve` for Java) so Stubby can also inspect the packages that depend on a vulnerable one. To also identify which function of
|
|
23
|
+
each package is vulnerable, add `--llm openai` (reads `OPENAI_API_KEY`). Only
|
|
24
|
+
public advisory text and fix diffs are sent, never your code. Example output:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
lodash@4.17.15 CVE-2020-8203 inconclusive imported in 3 file(s); members used: merge, template; 4 call site(s); vulnerable symbol not identified yet
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Why
|
|
31
|
+
|
|
32
|
+
- Scanners produce hundreds of alerts, most of them irrelevant to how a project
|
|
33
|
+
uses a library.
|
|
34
|
+
- Regulation (e.g. the EU Cyber Resilience Act) increasingly asks for VEX
|
|
35
|
+
statements, and almost nobody generates them automatically.
|
|
36
|
+
- Advisories rarely say *which function* is dangerous in a structured way.
|
|
37
|
+
|
|
38
|
+
## How it works
|
|
39
|
+
|
|
40
|
+
Stubby reads your lockfile, looks up known vulnerabilities on
|
|
41
|
+
[OSV.dev](https://osv.dev), and checks how your code uses each affected
|
|
42
|
+
package. Every verdict (`affected`, `not_affected` or `inconclusive`) cites file
|
|
43
|
+
and line, and the output is a draft for human review, never a guarantee. See
|
|
44
|
+
[docs/architecture.md](docs/architecture.md) for details.
|
|
45
|
+
|
|
46
|
+
## Roadmap
|
|
47
|
+
|
|
48
|
+
- [x] v0.1 – npm lockfile, OSV lookup, import-level detection, OpenVEX output
|
|
49
|
+
- [x] v0.2 – tree-sitter based JS/TS analysis (named imports, call sites)
|
|
50
|
+
- [x] v0.3 – LLM symbol extraction from advisory text and fix-commit diff
|
|
51
|
+
- [x] v0.4 – benchmark suite (known CVEs, expected verdicts)
|
|
52
|
+
- [x] v0.5 – transitive dependencies
|
|
53
|
+
- [x] v0.6 – Python adapter
|
|
54
|
+
- [x] v0.7 – Java adapter
|
|
55
|
+
|
|
56
|
+
## Why "Stubby"?
|
|
57
|
+
|
|
58
|
+
Named after [Sergeant Stubby](https://pt.wikipedia.org/wiki/Stubby), the dog who
|
|
59
|
+
served with the US 102nd Infantry Regiment in World War I. He is remembered for
|
|
60
|
+
sensing danger, such as incoming gas attacks, before the soldiers did. The tool
|
|
61
|
+
aims to do the same for your dependencies: raise the alarm only for the
|
|
62
|
+
vulnerabilities that can actually reach your code.
|
|
63
|
+
|
|
64
|
+
## Contributing
|
|
65
|
+
|
|
66
|
+
Benchmark cases (a real CVE, a small project, the expected verdict) are the
|
|
67
|
+
most valuable contribution; see [benchmarks/](benchmarks/README.md). Open an issue to discuss before large changes.
|
|
68
|
+
|
|
69
|
+
## License
|
|
70
|
+
|
|
71
|
+
Apache-2.0
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Benchmark
|
|
2
|
+
|
|
3
|
+
Real advisories, tiny projects and the verdict a careful human would give. The
|
|
4
|
+
suite measures whether Stubby's verdicts can be trusted; its one hard rule is
|
|
5
|
+
**zero false `not_affected`**, which fails the run (exit code 1).
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
stubby bench # replay recorded LLM answers, fully offline
|
|
9
|
+
stubby bench --strict # also fail on any missed verdict
|
|
10
|
+
stubby bench --live openai # ask a real model (needs OPENAI_API_KEY)
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The report lists each case, the number of matches, and precision and recall per
|
|
14
|
+
verdict. Cases marked `gap` are known limitations: the tool is cautious
|
|
15
|
+
(`inconclusive`) where a human could be definite. They are kept on purpose and
|
|
16
|
+
shown with the reason.
|
|
17
|
+
|
|
18
|
+
## Adding a case
|
|
19
|
+
|
|
20
|
+
Create `cases/<id>/` with:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
case.json
|
|
24
|
+
project/
|
|
25
|
+
package-lock.json npm, or poetry.lock / requirements.txt for Python
|
|
26
|
+
src/... the code under test
|
|
27
|
+
node_modules/ or .venv/... installed dependencies, when dependents matter
|
|
28
|
+
pom.xml + dependency-tree.txt Maven, or gradle.lockfile for Gradle
|
|
29
|
+
.m2/repository/... fake jars (zip files with minimal class files) for Java
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
A Python case needs a (fake) environment at `project/.venv/lib/python3.12/site-packages`
|
|
33
|
+
with a `<name>-<version>.dist-info/{METADATA,RECORD}` per package; without one the
|
|
34
|
+
tool correctly refuses to rule anything out.
|
|
35
|
+
|
|
36
|
+
`case.json`:
|
|
37
|
+
|
|
38
|
+
| Field | Meaning |
|
|
39
|
+
| --- | --- |
|
|
40
|
+
| `description` | What the case demonstrates |
|
|
41
|
+
| `package` | Affected package name in the lockfile |
|
|
42
|
+
| `expected` | `affected`, `not_affected` or `inconclusive`: the correct answer for a human, not what the tool says today |
|
|
43
|
+
| `vulnerability` | The OSV record (`id`, `aliases`, `summary`, `details`, `references`), copied from `https://api.osv.dev/v1/vulns/<id>` |
|
|
44
|
+
| `llm_response` | The model answer to replay: `confidence` and `symbols` (`name`, `module`, `quote`); every `quote` must appear verbatim in the advisory |
|
|
45
|
+
| `known_gap` | Optional. Why the tool cannot reach `expected` yet. The test suite fails once the gap is fixed, as a cue to remove it |
|
|
46
|
+
|
|
47
|
+
Use a real advisory, keep the project minimal, and prefer cases that stress a
|
|
48
|
+
single behaviour (a call, a dynamic import, a re-export, ...).
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Transitive Django; the library that requires it only escapes HTML",
|
|
3
|
+
"package": "django",
|
|
4
|
+
"expected": "not_affected",
|
|
5
|
+
"vulnerability": {
|
|
6
|
+
"id": "GHSA-8498-2h75-472j",
|
|
7
|
+
"aliases": [
|
|
8
|
+
"BIT-django-2024-53907",
|
|
9
|
+
"CVE-2024-53907",
|
|
10
|
+
"PYSEC-2024-156"
|
|
11
|
+
],
|
|
12
|
+
"summary": "Django denial-of-service in django.utils.html.strip_tags()",
|
|
13
|
+
"details": "An issue was discovered in Django 5.1 before 5.1.4, 5.0 before 5.0.10, and 4.2 before 4.2.17. The strip_tags() method and striptags template filter are subject to a potential denial-of-service attack via certain inputs containing large sequences of nested incomplete HTML entities.",
|
|
14
|
+
"references": [
|
|
15
|
+
{
|
|
16
|
+
"type": "ADVISORY",
|
|
17
|
+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2024-53907"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "WEB",
|
|
21
|
+
"url": "https://docs.djangoproject.com/en/dev/releases/security"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"type": "PACKAGE",
|
|
25
|
+
"url": "https://github.com/django/django"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"type": "WEB",
|
|
29
|
+
"url": "https://github.com/pypa/advisory-database/tree/main/vulns/django/PYSEC-2024-156.yaml"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "WEB",
|
|
33
|
+
"url": "https://groups.google.com/g/django-announce"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"type": "WEB",
|
|
37
|
+
"url": "https://lists.debian.org/debian-lts-announce/2024/12/msg00028.html"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"type": "WEB",
|
|
41
|
+
"url": "https://www.djangoproject.com/weblog/2024/dec/04/security-releases"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"type": "WEB",
|
|
45
|
+
"url": "https://www.openwall.com/lists/oss-security/2024/12/04/3"
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
"llm_response": {
|
|
50
|
+
"confidence": "high",
|
|
51
|
+
"symbols": [
|
|
52
|
+
{
|
|
53
|
+
"name": "strip_tags",
|
|
54
|
+
"module": "django.utils.html",
|
|
55
|
+
"quote": "The strip_tags() method and striptags template filter"
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Transitive Django; the library that requires it calls strip_tags",
|
|
3
|
+
"package": "django",
|
|
4
|
+
"expected": "inconclusive",
|
|
5
|
+
"vulnerability": {
|
|
6
|
+
"id": "GHSA-8498-2h75-472j",
|
|
7
|
+
"aliases": [
|
|
8
|
+
"BIT-django-2024-53907",
|
|
9
|
+
"CVE-2024-53907",
|
|
10
|
+
"PYSEC-2024-156"
|
|
11
|
+
],
|
|
12
|
+
"summary": "Django denial-of-service in django.utils.html.strip_tags()",
|
|
13
|
+
"details": "An issue was discovered in Django 5.1 before 5.1.4, 5.0 before 5.0.10, and 4.2 before 4.2.17. The strip_tags() method and striptags template filter are subject to a potential denial-of-service attack via certain inputs containing large sequences of nested incomplete HTML entities.",
|
|
14
|
+
"references": [
|
|
15
|
+
{
|
|
16
|
+
"type": "ADVISORY",
|
|
17
|
+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2024-53907"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "WEB",
|
|
21
|
+
"url": "https://docs.djangoproject.com/en/dev/releases/security"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"type": "PACKAGE",
|
|
25
|
+
"url": "https://github.com/django/django"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"type": "WEB",
|
|
29
|
+
"url": "https://github.com/pypa/advisory-database/tree/main/vulns/django/PYSEC-2024-156.yaml"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "WEB",
|
|
33
|
+
"url": "https://groups.google.com/g/django-announce"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"type": "WEB",
|
|
37
|
+
"url": "https://lists.debian.org/debian-lts-announce/2024/12/msg00028.html"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"type": "WEB",
|
|
41
|
+
"url": "https://www.djangoproject.com/weblog/2024/dec/04/security-releases"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"type": "WEB",
|
|
45
|
+
"url": "https://www.openwall.com/lists/oss-security/2024/12/04/3"
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
"llm_response": {
|
|
50
|
+
"confidence": "high",
|
|
51
|
+
"symbols": [
|
|
52
|
+
{
|
|
53
|
+
"name": "strip_tags",
|
|
54
|
+
"module": "django.utils.html",
|
|
55
|
+
"quote": "The strip_tags() method and striptags template filter"
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "strip_tags imported from django.utils.html and called (poetry.lock)",
|
|
3
|
+
"package": "django",
|
|
4
|
+
"expected": "affected",
|
|
5
|
+
"vulnerability": {
|
|
6
|
+
"id": "GHSA-8498-2h75-472j",
|
|
7
|
+
"aliases": [
|
|
8
|
+
"BIT-django-2024-53907",
|
|
9
|
+
"CVE-2024-53907",
|
|
10
|
+
"PYSEC-2024-156"
|
|
11
|
+
],
|
|
12
|
+
"summary": "Django denial-of-service in django.utils.html.strip_tags()",
|
|
13
|
+
"details": "An issue was discovered in Django 5.1 before 5.1.4, 5.0 before 5.0.10, and 4.2 before 4.2.17. The strip_tags() method and striptags template filter are subject to a potential denial-of-service attack via certain inputs containing large sequences of nested incomplete HTML entities.",
|
|
14
|
+
"references": [
|
|
15
|
+
{
|
|
16
|
+
"type": "ADVISORY",
|
|
17
|
+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2024-53907"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "WEB",
|
|
21
|
+
"url": "https://docs.djangoproject.com/en/dev/releases/security"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"type": "PACKAGE",
|
|
25
|
+
"url": "https://github.com/django/django"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"type": "WEB",
|
|
29
|
+
"url": "https://github.com/pypa/advisory-database/tree/main/vulns/django/PYSEC-2024-156.yaml"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "WEB",
|
|
33
|
+
"url": "https://groups.google.com/g/django-announce"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"type": "WEB",
|
|
37
|
+
"url": "https://lists.debian.org/debian-lts-announce/2024/12/msg00028.html"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"type": "WEB",
|
|
41
|
+
"url": "https://www.djangoproject.com/weblog/2024/dec/04/security-releases"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"type": "WEB",
|
|
45
|
+
"url": "https://www.openwall.com/lists/oss-security/2024/12/04/3"
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
"llm_response": {
|
|
50
|
+
"confidence": "high",
|
|
51
|
+
"symbols": [
|
|
52
|
+
{
|
|
53
|
+
"name": "strip_tags",
|
|
54
|
+
"module": "django.utils.html",
|
|
55
|
+
"quote": "The strip_tags() method and striptags template filter"
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
[[package]]
|
|
2
|
+
name = "asgiref"
|
|
3
|
+
version = "3.7.2"
|
|
4
|
+
description = ""
|
|
5
|
+
optional = false
|
|
6
|
+
python-versions = ">=3.8"
|
|
7
|
+
|
|
8
|
+
[[package]]
|
|
9
|
+
name = "django"
|
|
10
|
+
version = "4.2.0"
|
|
11
|
+
description = ""
|
|
12
|
+
optional = false
|
|
13
|
+
python-versions = ">=3.8"
|
|
14
|
+
|
|
15
|
+
[package.dependencies]
|
|
16
|
+
asgiref = "*"
|
|
17
|
+
sqlparse = "*"
|
|
18
|
+
|
|
19
|
+
[[package]]
|
|
20
|
+
name = "sqlparse"
|
|
21
|
+
version = "0.4.4"
|
|
22
|
+
description = ""
|
|
23
|
+
optional = false
|
|
24
|
+
python-versions = ">=3.8"
|
|
25
|
+
|
|
26
|
+
[metadata]
|
|
27
|
+
lock-version = "2.0"
|
|
28
|
+
python-versions = "^3.8"
|
|
29
|
+
content-hash = "x"
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Unrelated sub-module; correct answer is not_affected, the tool stays cautious",
|
|
3
|
+
"package": "lodash",
|
|
4
|
+
"expected": "not_affected",
|
|
5
|
+
"known_gap": "sub-module imports are treated as opaque because the sub-module could implement the vulnerable function",
|
|
6
|
+
"vulnerability": {
|
|
7
|
+
"id": "GHSA-jf85-cpcp-j695",
|
|
8
|
+
"aliases": [
|
|
9
|
+
"CVE-2019-10744",
|
|
10
|
+
"SNYK-JS-LODASH-450202"
|
|
11
|
+
],
|
|
12
|
+
"summary": "Prototype Pollution in lodash",
|
|
13
|
+
"details": "Versions of `lodash` before 4.17.12 are vulnerable to Prototype Pollution. The function `defaultsDeep` allows a malicious user to modify the prototype of `Object` via `{constructor: {prototype: {...}}}` causing the addition or modification of an existing property that will exist on all objects.\n\n## Recommendation\n\nUpdate to version 4.17.12 or later.",
|
|
14
|
+
"references": [
|
|
15
|
+
{
|
|
16
|
+
"type": "ADVISORY",
|
|
17
|
+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2019-10744"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "WEB",
|
|
21
|
+
"url": "https://github.com/lodash/lodash/pull/4336"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"type": "WEB",
|
|
25
|
+
"url": "https://access.redhat.com/errata/RHSA-2019:3024"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"type": "WEB",
|
|
29
|
+
"url": "https://github.com/rubysec/ruby-advisory-db/blob/master/gems/lodash-rails/CVE-2019-10744.yml"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "WEB",
|
|
33
|
+
"url": "https://security.netapp.com/advisory/ntap-20191004-0005"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"type": "WEB",
|
|
37
|
+
"url": "https://snyk.io/vuln/SNYK-JS-LODASH-450202"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"type": "WEB",
|
|
41
|
+
"url": "https://support.f5.com/csp/article/K47105354?utm_source=f5support&%3Butm_medium=RSS"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"type": "WEB",
|
|
45
|
+
"url": "https://support.f5.com/csp/article/K47105354?utm_source=f5support&utm_medium=RSS"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"type": "WEB",
|
|
49
|
+
"url": "https://www.oracle.com/security-alerts/cpujan2021.html"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"type": "WEB",
|
|
53
|
+
"url": "https://www.oracle.com/security-alerts/cpuoct2020.html"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
"llm_response": {
|
|
58
|
+
"confidence": "high",
|
|
59
|
+
"symbols": [
|
|
60
|
+
{
|
|
61
|
+
"name": "defaultsDeep",
|
|
62
|
+
"module": "",
|
|
63
|
+
"quote": "The function `defaultsDeep` allows a malicious user to modify the prototype"
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
}
|
stubby_vex-0.7.0/benchmarks/cases/lodash-defaultsdeep-other-submodule/project/package-lock.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bench-app",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"lockfileVersion": 3,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"packages": {
|
|
7
|
+
"": {
|
|
8
|
+
"name": "bench-app",
|
|
9
|
+
"version": "1.0.0",
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"lodash": "4.17.11"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"node_modules/lodash": {
|
|
15
|
+
"version": "4.17.11"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|