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.
Files changed (240) hide show
  1. stubby_vex-0.7.0/.gitignore +7 -0
  2. stubby_vex-0.7.0/CLAUDE.md +45 -0
  3. stubby_vex-0.7.0/PKG-INFO +88 -0
  4. stubby_vex-0.7.0/README.md +71 -0
  5. stubby_vex-0.7.0/benchmarks/.gitignore +3 -0
  6. stubby_vex-0.7.0/benchmarks/README.md +48 -0
  7. stubby_vex-0.7.0/benchmarks/cases/django-dependent-clear/case.json +59 -0
  8. stubby_vex-0.7.0/benchmarks/cases/django-dependent-clear/project/app.py +3 -0
  9. stubby_vex-0.7.0/benchmarks/cases/django-dependent-clear/project/requirements.txt +8 -0
  10. stubby_vex-0.7.0/benchmarks/cases/django-dependent-uses-symbol/case.json +59 -0
  11. stubby_vex-0.7.0/benchmarks/cases/django-dependent-uses-symbol/project/app.py +3 -0
  12. stubby_vex-0.7.0/benchmarks/cases/django-dependent-uses-symbol/project/requirements.txt +8 -0
  13. stubby_vex-0.7.0/benchmarks/cases/django-strip-tags/case.json +59 -0
  14. stubby_vex-0.7.0/benchmarks/cases/django-strip-tags/project/app.py +5 -0
  15. stubby_vex-0.7.0/benchmarks/cases/django-strip-tags/project/poetry.lock +29 -0
  16. stubby_vex-0.7.0/benchmarks/cases/django-strip-tags/project/pyproject.toml +9 -0
  17. stubby_vex-0.7.0/benchmarks/cases/lodash-defaultsdeep-other-submodule/case.json +67 -0
  18. stubby_vex-0.7.0/benchmarks/cases/lodash-defaultsdeep-other-submodule/project/package-lock.json +18 -0
  19. stubby_vex-0.7.0/benchmarks/cases/lodash-defaultsdeep-other-submodule/project/src/wait.js +3 -0
  20. stubby_vex-0.7.0/benchmarks/cases/lodash-defaultsdeep-submodule/case.json +66 -0
  21. stubby_vex-0.7.0/benchmarks/cases/lodash-defaultsdeep-submodule/project/package-lock.json +18 -0
  22. stubby_vex-0.7.0/benchmarks/cases/lodash-defaultsdeep-submodule/project/src/defaults.js +3 -0
  23. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-chain-wrapper/case.json +99 -0
  24. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-chain-wrapper/project/package-lock.json +18 -0
  25. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-chain-wrapper/project/src/app.js +3 -0
  26. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-default-import/case.json +98 -0
  27. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-default-import/project/package-lock.json +18 -0
  28. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-default-import/project/src/set.js +3 -0
  29. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-safe-members/case.json +98 -0
  30. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-safe-members/project/package-lock.json +18 -0
  31. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-safe-members/project/src/read.js +4 -0
  32. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-same-name-on-other-object/case.json +99 -0
  33. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-same-name-on-other-object/project/package-lock.json +18 -0
  34. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-same-name-on-other-object/project/src/app.js +5 -0
  35. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-whole-module-escape/case.json +98 -0
  36. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-whole-module-escape/project/package-lock.json +18 -0
  37. stubby_vex-0.7.0/benchmarks/cases/lodash-pollution-whole-module-escape/project/src/plugins.js +3 -0
  38. stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/case.json +93 -0
  39. stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/project/node_modules/mid-lib/index.js +3 -0
  40. stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/project/node_modules/mid-lib/package.json +1 -0
  41. stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/project/node_modules/top-lib/index.js +1 -0
  42. stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/project/node_modules/top-lib/package.json +1 -0
  43. stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/project/package-lock.json +30 -0
  44. stubby_vex-0.7.0/benchmarks/cases/lodash-template-deep-chain-clear/project/src/app.js +3 -0
  45. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-clear/case.json +93 -0
  46. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-clear/project/node_modules/some-lib/index.js +3 -0
  47. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-clear/project/node_modules/some-lib/package.json +1 -0
  48. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-clear/project/package-lock.json +24 -0
  49. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-clear/project/src/app.js +3 -0
  50. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-dynamic-require/case.json +93 -0
  51. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-dynamic-require/project/node_modules/some-lib/index.js +3 -0
  52. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-dynamic-require/project/node_modules/some-lib/package.json +1 -0
  53. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-dynamic-require/project/package-lock.json +24 -0
  54. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-dynamic-require/project/src/app.js +3 -0
  55. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-ships-code-in-dist/case.json +93 -0
  56. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-ships-code-in-dist/project/node_modules/some-lib/dist/index.js +3 -0
  57. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-ships-code-in-dist/project/node_modules/some-lib/package.json +1 -0
  58. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-ships-code-in-dist/project/package-lock.json +24 -0
  59. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-ships-code-in-dist/project/src/app.js +3 -0
  60. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-uses-symbol/case.json +93 -0
  61. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-uses-symbol/project/node_modules/some-lib/index.js +3 -0
  62. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-uses-symbol/project/node_modules/some-lib/package.json +1 -0
  63. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-uses-symbol/project/package-lock.json +24 -0
  64. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dependent-uses-symbol/project/src/app.js +3 -0
  65. stubby_vex-0.7.0/benchmarks/cases/lodash-template-direct-and-dependent/case.json +93 -0
  66. stubby_vex-0.7.0/benchmarks/cases/lodash-template-direct-and-dependent/project/node_modules/some-lib/index.js +3 -0
  67. stubby_vex-0.7.0/benchmarks/cases/lodash-template-direct-and-dependent/project/node_modules/some-lib/package.json +1 -0
  68. stubby_vex-0.7.0/benchmarks/cases/lodash-template-direct-and-dependent/project/package-lock.json +25 -0
  69. stubby_vex-0.7.0/benchmarks/cases/lodash-template-direct-and-dependent/project/src/app.js +4 -0
  70. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dynamic-require/case.json +93 -0
  71. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dynamic-require/project/package-lock.json +18 -0
  72. stubby_vex-0.7.0/benchmarks/cases/lodash-template-dynamic-require/project/src/app.js +4 -0
  73. stubby_vex-0.7.0/benchmarks/cases/lodash-template-hallucinated-symbol/case.json +98 -0
  74. stubby_vex-0.7.0/benchmarks/cases/lodash-template-hallucinated-symbol/project/package-lock.json +18 -0
  75. stubby_vex-0.7.0/benchmarks/cases/lodash-template-hallucinated-symbol/project/src/app.js +3 -0
  76. stubby_vex-0.7.0/benchmarks/cases/lodash-template-multiline-ts/case.json +93 -0
  77. stubby_vex-0.7.0/benchmarks/cases/lodash-template-multiline-ts/project/package-lock.json +18 -0
  78. stubby_vex-0.7.0/benchmarks/cases/lodash-template-multiline-ts/project/src/render.ts +6 -0
  79. stubby_vex-0.7.0/benchmarks/cases/lodash-template-named-import/case.json +93 -0
  80. stubby_vex-0.7.0/benchmarks/cases/lodash-template-named-import/project/package-lock.json +18 -0
  81. stubby_vex-0.7.0/benchmarks/cases/lodash-template-named-import/project/src/app.js +3 -0
  82. stubby_vex-0.7.0/benchmarks/cases/lodash-template-never-imported/case.json +93 -0
  83. stubby_vex-0.7.0/benchmarks/cases/lodash-template-never-imported/project/package-lock.json +18 -0
  84. stubby_vex-0.7.0/benchmarks/cases/lodash-template-never-imported/project/src/app.js +1 -0
  85. stubby_vex-0.7.0/benchmarks/cases/lodash-template-other-member/case.json +93 -0
  86. stubby_vex-0.7.0/benchmarks/cases/lodash-template-other-member/project/package-lock.json +18 -0
  87. stubby_vex-0.7.0/benchmarks/cases/lodash-template-other-member/project/src/app.js +3 -0
  88. stubby_vex-0.7.0/benchmarks/cases/lodash-template-reexport/case.json +93 -0
  89. stubby_vex-0.7.0/benchmarks/cases/lodash-template-reexport/project/package-lock.json +18 -0
  90. stubby_vex-0.7.0/benchmarks/cases/lodash-template-reexport/project/src/index.js +1 -0
  91. stubby_vex-0.7.0/benchmarks/cases/lodash-template-require-destructure/case.json +93 -0
  92. stubby_vex-0.7.0/benchmarks/cases/lodash-template-require-destructure/project/package-lock.json +18 -0
  93. stubby_vex-0.7.0/benchmarks/cases/lodash-template-require-destructure/project/src/app.js +3 -0
  94. stubby_vex-0.7.0/benchmarks/cases/lodash-template-transitive/case.json +93 -0
  95. stubby_vex-0.7.0/benchmarks/cases/lodash-template-transitive/project/package-lock.json +24 -0
  96. stubby_vex-0.7.0/benchmarks/cases/lodash-template-transitive/project/src/app.js +3 -0
  97. stubby_vex-0.7.0/benchmarks/cases/lodash-template-type-only-import/case.json +93 -0
  98. stubby_vex-0.7.0/benchmarks/cases/lodash-template-type-only-import/project/package-lock.json +18 -0
  99. stubby_vex-0.7.0/benchmarks/cases/lodash-template-type-only-import/project/src/app.ts +5 -0
  100. stubby_vex-0.7.0/benchmarks/cases/minimist-callable-module/case.json +86 -0
  101. stubby_vex-0.7.0/benchmarks/cases/minimist-callable-module/project/package-lock.json +18 -0
  102. stubby_vex-0.7.0/benchmarks/cases/minimist-callable-module/project/src/cli.js +3 -0
  103. stubby_vex-0.7.0/benchmarks/cases/pillow-image-only/case.json +71 -0
  104. stubby_vex-0.7.0/benchmarks/cases/pillow-image-only/project/app.py +5 -0
  105. stubby_vex-0.7.0/benchmarks/cases/pillow-image-only/project/requirements.txt +1 -0
  106. stubby_vex-0.7.0/benchmarks/cases/pillow-imagemath-eval/case.json +71 -0
  107. stubby_vex-0.7.0/benchmarks/cases/pillow-imagemath-eval/project/app.py +5 -0
  108. stubby_vex-0.7.0/benchmarks/cases/pillow-imagemath-eval/project/requirements.txt +1 -0
  109. stubby_vex-0.7.0/benchmarks/cases/pillow-submodule-passed-around/case.json +71 -0
  110. stubby_vex-0.7.0/benchmarks/cases/pillow-submodule-passed-around/project/app.py +3 -0
  111. stubby_vex-0.7.0/benchmarks/cases/pillow-submodule-passed-around/project/requirements.txt +1 -0
  112. stubby_vex-0.7.0/benchmarks/cases/pyyaml-dynamic-import/case.json +79 -0
  113. stubby_vex-0.7.0/benchmarks/cases/pyyaml-dynamic-import/project/app.py +11 -0
  114. stubby_vex-0.7.0/benchmarks/cases/pyyaml-dynamic-import/project/requirements.txt +1 -0
  115. stubby_vex-0.7.0/benchmarks/cases/pyyaml-full-load/case.json +79 -0
  116. stubby_vex-0.7.0/benchmarks/cases/pyyaml-full-load/project/app.py +5 -0
  117. stubby_vex-0.7.0/benchmarks/cases/pyyaml-full-load/project/requirements.txt +1 -0
  118. stubby_vex-0.7.0/benchmarks/cases/pyyaml-fullloader-class/case.json +79 -0
  119. stubby_vex-0.7.0/benchmarks/cases/pyyaml-fullloader-class/project/app.py +5 -0
  120. stubby_vex-0.7.0/benchmarks/cases/pyyaml-fullloader-class/project/requirements.txt +1 -0
  121. stubby_vex-0.7.0/benchmarks/cases/pyyaml-no-environment/case.json +80 -0
  122. stubby_vex-0.7.0/benchmarks/cases/pyyaml-no-environment/project/app.py +5 -0
  123. stubby_vex-0.7.0/benchmarks/cases/pyyaml-no-environment/project/requirements.txt +1 -0
  124. stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-load/case.json +79 -0
  125. stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-load/project/app.py +5 -0
  126. stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-load/project/poetry.lock +11 -0
  127. stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-load/project/pyproject.toml +9 -0
  128. stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-names-from-import/case.json +79 -0
  129. stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-names-from-import/project/app.py +7 -0
  130. stubby_vex-0.7.0/benchmarks/cases/pyyaml-safe-names-from-import/project/requirements.txt +1 -0
  131. stubby_vex-0.7.0/benchmarks/cases/pyyaml-type-checking-import/case.json +79 -0
  132. stubby_vex-0.7.0/benchmarks/cases/pyyaml-type-checking-import/project/app.py +10 -0
  133. stubby_vex-0.7.0/benchmarks/cases/pyyaml-type-checking-import/project/requirements.txt +1 -0
  134. stubby_vex-0.7.0/benchmarks/cases/pyyaml-unresolved-import/case.json +79 -0
  135. stubby_vex-0.7.0/benchmarks/cases/pyyaml-unresolved-import/project/app.py +6 -0
  136. stubby_vex-0.7.0/benchmarks/cases/pyyaml-unresolved-import/project/requirements.txt +1 -0
  137. stubby_vex-0.7.0/benchmarks/cases/pyyaml-whole-module-escape/case.json +79 -0
  138. stubby_vex-0.7.0/benchmarks/cases/pyyaml-whole-module-escape/project/app.py +3 -0
  139. stubby_vex-0.7.0/benchmarks/cases/pyyaml-whole-module-escape/project/requirements.txt +1 -0
  140. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-class-for-name/case.json +101 -0
  141. 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
  142. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-class-for-name/project/dependency-tree.txt +2 -0
  143. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-class-for-name/project/pom.xml +7 -0
  144. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-class-for-name/project/src/main/java/com/acme/App.java +8 -0
  145. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-not-used/case.json +101 -0
  146. 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
  147. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-not-used/project/dependency-tree.txt +2 -0
  148. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-not-used/project/pom.xml +7 -0
  149. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-not-used/project/src/main/java/com/acme/App.java +10 -0
  150. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-used/case.json +101 -0
  151. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-used/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
  152. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-used/project/dependency-tree.txt +2 -0
  153. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-used/project/pom.xml +7 -0
  154. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-constructor-used/project/src/main/java/com/acme/App.java +10 -0
  155. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-clear/case.json +101 -0
  156. 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
  157. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-clear/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
  158. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-clear/project/dependency-tree.txt +3 -0
  159. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-clear/project/pom.xml +7 -0
  160. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-clear/project/src/main/java/com/acme/App.java +6 -0
  161. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-reflection/case.json +101 -0
  162. 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
  163. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-reflection/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
  164. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-reflection/project/dependency-tree.txt +3 -0
  165. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-reflection/project/pom.xml +7 -0
  166. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-reflection/project/src/main/java/com/acme/App.java +6 -0
  167. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-uses-constructor/case.json +101 -0
  168. 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
  169. 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
  170. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-uses-constructor/project/dependency-tree.txt +3 -0
  171. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-uses-constructor/project/pom.xml +7 -0
  172. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-dependent-uses-constructor/project/src/main/java/com/acme/App.java +6 -0
  173. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-gradle-lockfile/case.json +101 -0
  174. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-gradle-lockfile/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
  175. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-gradle-lockfile/project/build.gradle +1 -0
  176. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-gradle-lockfile/project/gradle.lockfile +3 -0
  177. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-gradle-lockfile/project/src/main/java/com/acme/App.java +10 -0
  178. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-no-jars/case.json +101 -0
  179. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-no-jars/project/dependency-tree.txt +2 -0
  180. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-no-jars/project/pom.xml +7 -0
  181. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-no-jars/project/src/main/java/com/acme/App.java +9 -0
  182. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-unattributed-method/case.json +106 -0
  183. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-unattributed-method/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
  184. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-unattributed-method/project/dependency-tree.txt +2 -0
  185. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-unattributed-method/project/pom.xml +7 -0
  186. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-unattributed-method/project/src/main/java/com/acme/App.java +12 -0
  187. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-wildcard-import/case.json +101 -0
  188. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-wildcard-import/project/.m2/repository/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar +0 -0
  189. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-wildcard-import/project/dependency-tree.txt +2 -0
  190. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-wildcard-import/project/pom.xml +7 -0
  191. stubby_vex-0.7.0/benchmarks/cases/snakeyaml-wildcard-import/project/src/main/java/com/acme/App.java +9 -0
  192. stubby_vex-0.7.0/docs/1280px-Sergeant_Stubby.jpg +0 -0
  193. stubby_vex-0.7.0/docs/Documento de Vis/303/243o.md" +100 -0
  194. stubby_vex-0.7.0/docs/Sgt_Stubby's_brick_at_Liberty_Memorial.jpg +0 -0
  195. stubby_vex-0.7.0/docs/architecture.md +189 -0
  196. stubby_vex-0.7.0/pyproject.toml +32 -0
  197. stubby_vex-0.7.0/src/stubby/__init__.py +3 -0
  198. stubby_vex-0.7.0/src/stubby/analyzers/__init__.py +0 -0
  199. stubby_vex-0.7.0/src/stubby/analyzers/base.py +62 -0
  200. stubby_vex-0.7.0/src/stubby/analyzers/java.py +326 -0
  201. stubby_vex-0.7.0/src/stubby/analyzers/java_ast.py +258 -0
  202. stubby_vex-0.7.0/src/stubby/analyzers/javascript.py +137 -0
  203. stubby_vex-0.7.0/src/stubby/analyzers/js_ast.py +294 -0
  204. stubby_vex-0.7.0/src/stubby/analyzers/observations.py +26 -0
  205. stubby_vex-0.7.0/src/stubby/analyzers/py_ast.py +248 -0
  206. stubby_vex-0.7.0/src/stubby/analyzers/python.py +272 -0
  207. stubby_vex-0.7.0/src/stubby/bench.py +164 -0
  208. stubby_vex-0.7.0/src/stubby/cli.py +154 -0
  209. stubby_vex-0.7.0/src/stubby/fixes.py +27 -0
  210. stubby_vex-0.7.0/src/stubby/graph.py +57 -0
  211. stubby_vex-0.7.0/src/stubby/jars.py +142 -0
  212. stubby_vex-0.7.0/src/stubby/llm/__init__.py +0 -0
  213. stubby_vex-0.7.0/src/stubby/llm/base.py +23 -0
  214. stubby_vex-0.7.0/src/stubby/llm/openai.py +55 -0
  215. stubby_vex-0.7.0/src/stubby/lockfiles/__init__.py +0 -0
  216. stubby_vex-0.7.0/src/stubby/lockfiles/java.py +157 -0
  217. stubby_vex-0.7.0/src/stubby/lockfiles/npm.py +116 -0
  218. stubby_vex-0.7.0/src/stubby/lockfiles/python.py +165 -0
  219. stubby_vex-0.7.0/src/stubby/models.py +75 -0
  220. stubby_vex-0.7.0/src/stubby/osv.py +87 -0
  221. stubby_vex-0.7.0/src/stubby/pyenv.py +137 -0
  222. stubby_vex-0.7.0/src/stubby/scan.py +334 -0
  223. stubby_vex-0.7.0/src/stubby/symbols.py +170 -0
  224. stubby_vex-0.7.0/src/stubby/vex.py +69 -0
  225. stubby_vex-0.7.0/tests/fixtures/.gitignore +1 -0
  226. stubby_vex-0.7.0/tests/fixtures/sample-js/node_modules/ignored/index.js +1 -0
  227. stubby_vex-0.7.0/tests/fixtures/sample-js/package-lock.json +22 -0
  228. stubby_vex-0.7.0/tests/fixtures/sample-js/src/index.ts +7 -0
  229. stubby_vex-0.7.0/tests/test_benchmark.py +79 -0
  230. stubby_vex-0.7.0/tests/test_cli.py +54 -0
  231. stubby_vex-0.7.0/tests/test_graph.py +149 -0
  232. stubby_vex-0.7.0/tests/test_java.py +205 -0
  233. stubby_vex-0.7.0/tests/test_javascript_edge_cases.py +57 -0
  234. stubby_vex-0.7.0/tests/test_js_ast.py +137 -0
  235. stubby_vex-0.7.0/tests/test_osv.py +61 -0
  236. stubby_vex-0.7.0/tests/test_pipeline.py +78 -0
  237. stubby_vex-0.7.0/tests/test_python.py +272 -0
  238. stubby_vex-0.7.0/tests/test_symbols.py +152 -0
  239. stubby_vex-0.7.0/tests/test_verdicts.py +150 -0
  240. stubby_vex-0.7.0/tests/test_vex.py +58 -0
@@ -0,0 +1,7 @@
1
+ __pycache__/
2
+ *.pyc
3
+ .pytest_cache/
4
+ *.egg-info/
5
+ /dist/
6
+ /build/
7
+ .venv/
@@ -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,3 @@
1
+ !node_modules/
2
+ !.venv/
3
+ !.m2/
@@ -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,3 @@
1
+ import some_lib
2
+
3
+ print(some_lib)
@@ -0,0 +1,8 @@
1
+ django==4.2.0
2
+ # via some-lib
3
+ some-lib==1.0.0
4
+ # via -r requirements.in
5
+ asgiref==3.7.2
6
+ # via django
7
+ sqlparse==0.4.4
8
+ # via django
@@ -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,3 @@
1
+ import some_lib
2
+
3
+ print(some_lib)
@@ -0,0 +1,8 @@
1
+ django==4.2.0
2
+ # via some-lib
3
+ some-lib==1.0.0
4
+ # via -r requirements.in
5
+ asgiref==3.7.2
6
+ # via django
7
+ sqlparse==0.4.4
8
+ # via django
@@ -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,5 @@
1
+ from django.utils.html import strip_tags
2
+
3
+
4
+ def clean(text):
5
+ return strip_tags(text)
@@ -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,9 @@
1
+ [tool.poetry]
2
+ name = "bench-app"
3
+ version = "1.0.0"
4
+ description = ""
5
+ authors = []
6
+
7
+ [tool.poetry.dependencies]
8
+ python = "^3.8"
9
+ django = "*"
@@ -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&amp%3Butm_medium=RSS"
42
+ },
43
+ {
44
+ "type": "WEB",
45
+ "url": "https://support.f5.com/csp/article/K47105354?utm_source=f5support&amp;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
+ }
@@ -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
+ }
@@ -0,0 +1,3 @@
1
+ const debounce = require('lodash/debounce');
2
+
3
+ module.exports = debounce(() => 1, 10);