Compare commits

..
Author SHA1 Message Date
Will Murphy 6676bb7459 fix lint
Signed-off-by: Will Murphy <will.murphy@anchore.com>
2024-04-24 13:31:08 -04:00
Will Murphy 20b692df04 newLazyUnionReader cannot return err
Signed-off-by: Will Murphy <will.murphy@anchore.com>
2024-04-24 12:51:49 -04:00
Will Murphy 434f100add clean up lazy union reader
Signed-off-by: Will Murphy <will.murphy@anchore.com>
2024-04-24 12:48:55 -04:00
Will Murphy bad5cf2af8 more passing lazy union reader tests
Signed-off-by: Will Murphy <will.murphy@anchore.com>
2024-04-24 11:00:50 -04:00
Will Murphy 20a26a0dfe very WIP: lazy union reader
Signed-off-by: Will Murphy <will.murphy@anchore.com>
2024-04-24 10:34:14 -04:00
William Murphy 6440f26b5a fix: return empty string if dereferncing pom var fails (#2797)
Previously, Syft would attempt to dereference pom variables, but if it
detected a cycle or failed to get back to a non-variable value, it would
return the last variable. Instead, return an empty string. Otherwise,
certain jars will have versions like "${project.version}" in the SBOM,
which is not helpful.

Signed-off-by: Will Murphy <will.murphy@anchore.com>
2024-04-19 19:38:36 +00:00
dependabot[bot] f2633800ce chore(deps): bump github.com/docker/docker (#2793)
Bumps [github.com/docker/docker](https://github.com/docker/docker) from 26.0.1+incompatible to 26.0.2+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Commits](https://github.com/docker/docker/compare/v26.0.1...v26.0.2)

---
updated-dependencies:
- dependency-name: github.com/docker/docker
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-19 15:06:57 -04:00
dependabot[bot] 4f227bf447 chore(deps): bump modernc.org/sqlite from 1.29.7 to 1.29.8 (#2794)
Bumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.29.7 to 1.29.8.
- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.29.7...v1.29.8)

---
updated-dependencies:
- dependency-name: modernc.org/sqlite
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-19 15:06:44 -04:00
dependabot[bot] d70eb3d04b chore(deps): bump actions/upload-artifact from 4.3.1 to 4.3.2 (#2795)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.3.1 to 4.3.2.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/5d5d22a31266ced268874388b861e4b58bb5c2f3...1746f4ab65b179e0ea60a494b83293b640dd5bba)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-19 15:06:32 -04:00
guangwu fe4819bc08 chore: cleanup redundant code (#2791)
Signed-off-by: guoguangwu <guoguangwug@gmail.com>
2024-04-19 12:12:48 -04:00
anchore-actions-token-generator[bot]andspiffcs b26b38d6c5 chore(deps): update tools to latest versions (#2789)
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: spiffcs <32073428+spiffcs@users.noreply.github.com>
2024-04-18 12:40:08 -04:00
dependabot[bot] 31969136e3 chore(deps): bump github.com/spdx/tools-golang from 0.5.3 to 0.5.4 (#2790)
Bumps [github.com/spdx/tools-golang](https://github.com/spdx/tools-golang) from 0.5.3 to 0.5.4.
- [Release notes](https://github.com/spdx/tools-golang/releases)
- [Changelog](https://github.com/spdx/tools-golang/blob/main/RELEASE-NOTES.md)
- [Commits](https://github.com/spdx/tools-golang/compare/v0.5.3...v0.5.4)

---
updated-dependencies:
- dependency-name: github.com/spdx/tools-golang
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-18 12:39:42 -04:00
dependabot[bot] f6845474bd chore(deps): bump github/codeql-action from 3.25.0 to 3.25.1 (#2786)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.25.0 to 3.25.1.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/df5a14dc28094dc936e103b37d749c6628682b60...c7f9125735019aa87cfc361530512d50ea439c71)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-17 10:46:34 -04:00
dependabot[bot] e1cadead1d chore(deps): bump peter-evans/create-pull-request from 6.0.3 to 6.0.4 (#2787)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6.0.3 to 6.0.4.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/c55203cfde3e5c11a452d352b4393e68b85b4533...9153d834b60caba6d51c9b9510b087acf9f33f83)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-17 10:46:24 -04:00
William Murphy 3e71f46fc8 Fix: repeatedly dereference pom variables (#2781)
* Fix: repeatedly dereference pom variables

Previously, if there was more than one layer of variable indirection in
the pom property (propert A says it has the same value as property B,
property B says it has the same value as property C), then Syft would
only dereference one layer. Add a loop to dereference variables until
either dereferencing fails, or until the variable is completely
dereferenced back to a literal.

Signed-off-by: Will Murphy <will.murphy@anchore.com>

* switch to recursive implementation

Signed-off-by: Will Murphy <will.murphy@anchore.com>

* add test cases for degenerate poms

Signed-off-by: Will Murphy <will.murphy@anchore.com>

* switch to recursive implementation

Signed-off-by: Will Murphy <will.murphy@anchore.com>

* remove redundant pieces of test cases

Signed-off-by: Will Murphy <will.murphy@anchore.com>

---------

Signed-off-by: Will Murphy <will.murphy@anchore.com>
2024-04-16 15:44:02 -04:00
dependabot[bot] 3b01e13f92 chore(deps): bump modernc.org/sqlite from 1.29.6 to 1.29.7 (#2783)
Bumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.29.6 to 1.29.7.
- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.29.6...v1.29.7)

---
updated-dependencies:
- dependency-name: modernc.org/sqlite
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-16 11:05:35 -04:00
anchore-actions-token-generator[bot]andwestonsteimel 25c2e60358 chore(deps): update CPE dictionary index (#2780)
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: westonsteimel <1593939+westonsteimel@users.noreply.github.com>
2024-04-15 11:15:38 -04:00
dependabot[bot] dc7fa21980 chore(deps): bump github/codeql-action from 3.24.10 to 3.25.0 (#2779)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.24.10 to 3.25.0.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/4355270be187e1b672a7a1c7c7bae5afdc1ab94a...df5a14dc28094dc936e103b37d749c6628682b60)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-15 10:00:54 -04:00
22 changed files with 512 additions and 635 deletions
+1 -1
View File
@@ -111,7 +111,7 @@ tools:
# used for triggering a release
- name: gh
version:
want: v2.47.0
want: v2.48.0
method: github-release
with:
repo: cli/cli
+1 -1
View File
@@ -39,7 +39,7 @@ jobs:
OUTPUT="${OUTPUT//$'\r'/'%0D'}" # URL encode all '\r' characters
echo "result=$OUTPUT" >> $GITHUB_OUTPUT
- uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
- uses: actions/upload-artifact@1746f4ab65b179e0ea60a494b83293b640dd5bba # v4.3.2
with:
name: benchmark-test-results
path: test/results/**/*
+3 -3
View File
@@ -45,7 +45,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@4355270be187e1b672a7a1c7c7bae5afdc1ab94a #v3.24.10
uses: github/codeql-action/init@c7f9125735019aa87cfc361530512d50ea439c71 #v3.25.1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -56,7 +56,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@4355270be187e1b672a7a1c7c7bae5afdc1ab94a #v3.24.10
uses: github/codeql-action/autobuild@c7f9125735019aa87cfc361530512d50ea439c71 #v3.25.1
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -70,4 +70,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@4355270be187e1b672a7a1c7c7bae5afdc1ab94a #v3.24.10
uses: github/codeql-action/analyze@c7f9125735019aa87cfc361530512d50ea439c71 #v3.25.1
+1 -1
View File
@@ -50,7 +50,7 @@ jobs:
app_id: ${{ secrets.TOKEN_APP_ID }}
private_key: ${{ secrets.TOKEN_APP_PRIVATE_KEY }}
- uses: peter-evans/create-pull-request@c55203cfde3e5c11a452d352b4393e68b85b4533 #v6.0.3
- uses: peter-evans/create-pull-request@9153d834b60caba6d51c9b9510b087acf9f33f83 #v6.0.4
with:
signoff: true
delete-branch: true
@@ -33,7 +33,7 @@ jobs:
app_id: ${{ secrets.TOKEN_APP_ID }}
private_key: ${{ secrets.TOKEN_APP_PRIVATE_KEY }}
- uses: peter-evans/create-pull-request@c55203cfde3e5c11a452d352b4393e68b85b4533 #v6.0.3
- uses: peter-evans/create-pull-request@9153d834b60caba6d51c9b9510b087acf9f33f83 #v6.0.4
with:
signoff: true
delete-branch: true
@@ -44,7 +44,7 @@ jobs:
app_id: ${{ secrets.TOKEN_APP_ID }}
private_key: ${{ secrets.TOKEN_APP_PRIVATE_KEY }}
- uses: peter-evans/create-pull-request@c55203cfde3e5c11a452d352b4393e68b85b4533 #v6.0.3
- uses: peter-evans/create-pull-request@9153d834b60caba6d51c9b9510b087acf9f33f83 #v6.0.4
with:
signoff: true
delete-branch: true
+8 -8
View File
@@ -29,7 +29,7 @@ require (
github.com/dave/jennifer v1.7.0
github.com/deitch/magic v0.0.0-20230404182410-1ff89d7342da
github.com/distribution/reference v0.6.0
github.com/docker/docker v26.0.1+incompatible
github.com/docker/docker v26.0.2+incompatible
github.com/dustin/go-humanize v1.0.1
github.com/elliotchance/phpserialize v1.4.0
github.com/facebookincubator/nvdtools v0.1.5
@@ -66,7 +66,7 @@ require (
// pinned to pull in 386 arch fix: https://github.com/scylladb/go-set/commit/cc7b2070d91ebf40d233207b633e28f5bd8f03a5
github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3
github.com/spdx/tools-golang v0.5.3
github.com/spdx/tools-golang v0.5.4
github.com/spf13/afero v1.11.0
github.com/spf13/cobra v1.8.0
github.com/stretchr/testify v1.9.0
@@ -80,7 +80,7 @@ require (
golang.org/x/mod v0.17.0
golang.org/x/net v0.24.0
gopkg.in/yaml.v3 v3.0.1
modernc.org/sqlite v1.29.6
modernc.org/sqlite v1.29.8
)
require (
@@ -136,7 +136,7 @@ require (
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 // indirect
github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
@@ -155,7 +155,7 @@ require (
github.com/magiconair/properties v1.8.7 // indirect
github.com/maruel/natural v1.1.1 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.18 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-localereader v0.0.2-0.20220822084749-2491eb6c1c75 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
@@ -224,7 +224,7 @@ require (
golang.org/x/sys v0.19.0 // indirect
golang.org/x/term v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.17.0 // indirect
golang.org/x/tools v0.19.0 // indirect
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect
@@ -233,9 +233,9 @@ require (
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect
modernc.org/libc v1.41.0 // indirect
modernc.org/libc v1.49.3 // indirect
modernc.org/mathutil v1.6.0 // indirect
modernc.org/memory v1.7.2 // indirect
modernc.org/memory v1.8.0 // indirect
modernc.org/strutil v1.2.0 // indirect
modernc.org/token v1.1.0 // indirect
)
+27 -17
View File
@@ -223,8 +223,8 @@ github.com/docker/cli v24.0.0+incompatible h1:0+1VshNwBQzQAx9lOl+OYCTCEAD8fKs/qe
github.com/docker/cli v24.0.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
github.com/docker/docker v26.0.1+incompatible h1:t39Hm6lpXuXtgkF0dm1t9a5HkbUfdGy6XbWexmGr+hA=
github.com/docker/docker v26.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker v26.0.2+incompatible h1:yGVmKUFGgcxA6PXWAokO0sQL22BrQ67cgVjko8tGdXE=
github.com/docker/docker v26.0.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A=
github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0=
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
@@ -398,8 +398,8 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo=
github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -536,8 +536,8 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98=
github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-localereader v0.0.2-0.20220822084749-2491eb6c1c75 h1:P8UmIzZMYDR+NGImiFvErt6VWfIRPuGM+vyjiEdkmIw=
github.com/mattn/go-localereader v0.0.2-0.20220822084749-2491eb6c1c75/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
@@ -714,8 +714,8 @@ github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9yS
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spdx/gordf v0.0.0-20201111095634-7098f93598fb/go.mod h1:uKWaldnbMnjsSAXRurWqqrdyZen1R7kxl8TkmWk2OyM=
github.com/spdx/tools-golang v0.5.3 h1:ialnHeEYUC4+hkm5vJm4qz2x+oEJbS0mAMFrNXdQraY=
github.com/spdx/tools-golang v0.5.3/go.mod h1:/ETOahiAo96Ob0/RAIBmFZw6XN0yTnyr/uFZm2NTMhI=
github.com/spdx/tools-golang v0.5.4 h1:fRW4iz16P1ZCUtWStFqS6YiMgnK7WgfTFU/lrsYlvqY=
github.com/spdx/tools-golang v0.5.4/go.mod h1:MVIsXx8ZZzaRWNQpUDhC4Dud34edUYJYecciXgrw5vE=
github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
@@ -1155,8 +1155,8 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc=
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1349,18 +1349,28 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
modernc.org/cc/v4 v4.20.0 h1:45Or8mQfbUqJOG9WaxvlFYOAQO0lQ5RvqBcFCXngjxk=
modernc.org/cc/v4 v4.20.0/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ=
modernc.org/ccgo/v4 v4.16.0 h1:ofwORa6vx2FMm0916/CkZjpFPSR70VwTjUCe2Eg5BnA=
modernc.org/ccgo/v4 v4.16.0/go.mod h1:dkNyWIjFrVIZ68DTo36vHK+6/ShBn4ysU61So6PIqCI=
modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE=
modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ=
modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw=
modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU=
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 h1:5D53IMaUuA5InSeMu9eJtlQXS2NxAhyWQvkKEgXZhHI=
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
modernc.org/libc v1.41.0 h1:g9YAc6BkKlgORsUWj+JwqoB1wU3o4DE3bM3yvA3k+Gk=
modernc.org/libc v1.41.0/go.mod h1:w0eszPsiXoOnoMJgrXjglgLuDy/bt5RR4y3QzUUeodY=
modernc.org/libc v1.49.3 h1:j2MRCRdwJI2ls/sGbeSk0t2bypOG/uvPZUsGQFDulqg=
modernc.org/libc v1.49.3/go.mod h1:yMZuGkn7pXbKfoT/M35gFJOAEdSKdxL0q64sF7KqCDo=
modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4=
modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
modernc.org/memory v1.7.2 h1:Klh90S215mmH8c9gO98QxQFsY+W451E8AnzjoE2ee1E=
modernc.org/memory v1.7.2/go.mod h1:NO4NVCQy0N7ln+T9ngWqOQfi7ley4vpwvARR+Hjw95E=
modernc.org/sqlite v1.29.6 h1:0lOXGrycJPptfHDuohfYgNqoe4hu+gYuN/pKgY5XjS4=
modernc.org/sqlite v1.29.6/go.mod h1:S02dvcmm7TnTRvGhv8IGYyLnIt7AS2KPaB1F/71p75U=
modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E=
modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU=
modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4=
modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc=
modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss=
modernc.org/sqlite v1.29.8 h1:nGKglNx9K5v0As+zF0/Gcl1kMkmaU1XynYyq92PbsC8=
modernc.org/sqlite v1.29.8/go.mod h1:lQPm27iqa4UNZpmr4Aor0MH0HkCLbt1huYDfWylLZFk=
modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA=
modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0=
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
@@ -1368,4 +1378,4 @@ modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
@@ -0,0 +1,135 @@
package unionreader
import (
"bytes"
"errors"
"fmt"
"io"
"math"
"sync"
)
// lazyUnionReader must implement UnionReader
var _ UnionReader = (*lazyUnionReader)(nil)
// lazyUnionReader wraps an io.Reader to make it into a logical ReadSeeker
// The reader maintains a []byte, which is everything that has been read so far.
// Otherwise, callers needing a ReadSeeker might copy the entire reader into
// a buffer in order to have a seeker.
type lazyUnionReader struct {
buf []byte // the bytes that have been read so far
cursor int64 // the current position where Read() will take place
rc io.ReadCloser // the underlying reader
mu sync.Mutex // exported methods must acquire this lock before changing any field. Unexported methods assume their caller acquired the lock
}
func (c *lazyUnionReader) Read(p []byte) (n int, err error) {
c.mu.Lock()
defer c.mu.Unlock()
needBytes := int64(len(p))
newOffset := c.cursor + needBytes
err = c.ensureReadUntil(newOffset)
if err != nil && !errors.Is(err, io.EOF) {
return 0, err
}
// stop reading either at cursor + length p, or the end of the underlying reader,
// whichever is sooner
end := min(c.cursor+int64(len(p)), int64(len(c.buf)))
copy(p, c.buf[c.cursor:end])
n = int(end - c.cursor)
c.cursor = end
return n, err
}
func (c *lazyUnionReader) ReadAt(p []byte, off int64) (n int, err error) {
c.mu.Lock()
defer c.mu.Unlock()
needUntil := int64(len(p)) + off
err = c.ensureReadUntil(needUntil)
end := min(off+int64(len(p)), int64(len(c.buf)))
start := min(off, c.maxRead())
if off > start {
return 0, io.EOF
}
copy(p, c.buf[start:end])
return int(end - start), err
}
func (c *lazyUnionReader) Seek(offset int64, whence int) (int64, error) {
c.mu.Lock()
defer c.mu.Unlock()
var trueOffset int64
var err error
switch whence {
case io.SeekStart:
trueOffset = offset
case io.SeekCurrent:
trueOffset = offset + c.cursor
err = c.ensureReadUntil(trueOffset)
case io.SeekEnd:
err = c.readAll()
trueOffset = c.maxRead() + offset
}
if err != nil {
return 0, err
}
if trueOffset < 0 {
return 0, fmt.Errorf("request to read negative offset impossible %v", trueOffset)
}
trueOffset = min(c.maxRead(), trueOffset)
c.cursor = trueOffset
return c.cursor, nil
}
func (c *lazyUnionReader) Close() error {
c.mu.Lock()
defer c.mu.Unlock()
return c.rc.Close()
}
func (c *lazyUnionReader) readAll() error {
buf, err := io.ReadAll(c.rc)
switch {
case err != nil && errors.Is(err, io.EOF):
err = nil
case err != nil:
return err
}
c.buf = append(c.buf, buf...)
return err
}
func (c *lazyUnionReader) ensureReadUntil(offset int64) error {
readN := offset - c.maxRead()
if readN <= 0 {
return nil
}
var buf bytes.Buffer
_, err := io.CopyN(&buf, c.rc, readN)
if err != nil && !errors.Is(err, io.EOF) {
return err
}
c.buf = append(c.buf, buf.Bytes()...)
return err
}
func (c *lazyUnionReader) maxRead() int64 {
return int64(len(c.buf))
}
func min(ints ...int64) int64 {
minSeeen := int64(math.MaxInt64) // really? math.MaxInt64 has type int?
for _, n := range ints {
if n < minSeeen {
minSeeen = n
}
}
return minSeeen
}
func newLazyUnionReader(readCloser io.ReadCloser) UnionReader {
return &lazyUnionReader{
rc: readCloser,
mu: sync.Mutex{},
}
}
@@ -0,0 +1,212 @@
package unionreader
import (
"bytes"
"io"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
type spyingCloser struct {
closed bool
io.Reader
}
func (s *spyingCloser) Close() error {
s.closed = true
return nil
}
func Test_lazyUnionReader_Close(t *testing.T) {
r := strings.NewReader("some string")
sc := &spyingCloser{
false,
r,
}
subject := newLazyUnionReader(sc)
require.NoError(t, subject.Close())
assert.True(t, sc.closed)
}
func Test_lazyUnionReader_ReadAll(t *testing.T) {
rc := io.NopCloser(strings.NewReader("some data"))
subject := newLazyUnionReader(rc)
b, err := io.ReadAll(subject)
require.NoError(t, err)
assert.Equal(t, "some data", string(b))
}
func Test_lazyUnionReader_RepeatedlyRead(t *testing.T) {
data := "some data for our reader that we need to read!"
rc := io.NopCloser(strings.NewReader(data))
subject := newLazyUnionReader(rc)
var readErr error
var readResult []byte
for readErr == nil {
buf := make([]byte, 2)
var n int
n, readErr = subject.Read(buf)
readResult = append(readResult, buf[:n]...)
}
assert.Equal(t, data, string(readResult))
assert.ErrorIs(t, readErr, io.EOF)
}
func Test_lazyUnionReader_ReadAt(t *testing.T) {
readStart := make([]byte, 4)
readMid := make([]byte, 4)
readEnd := make([]byte, 4)
tests := []struct {
name string
dst []byte
off int64
wantN int
wantBytes []byte
wantEOF bool
}{
{
name: "read first 4 bytes",
dst: readStart,
off: 0,
wantN: 4,
wantBytes: []byte("0123"),
},
{
name: "read 4 bytes from middle",
dst: readMid,
off: 4,
wantN: 4,
wantBytes: []byte("4567"),
},
{
name: "read last 4 bytes",
dst: readEnd,
off: 12,
wantN: 4,
wantBytes: []byte("cdef"),
},
{
name: "read past end",
dst: make([]byte, 4),
off: 14,
wantN: 2,
wantBytes: []byte("ef"),
wantEOF: true,
},
{
name: "read way out of bounds",
dst: make([]byte, 4),
off: 512,
wantN: 0,
wantEOF: true,
},
{
name: "buffer more than available",
dst: make([]byte, 512),
off: 0,
wantN: 16,
wantBytes: []byte("0123456789abcdef"),
wantEOF: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
rc := io.NopCloser(strings.NewReader("0123456789abcdef"))
subject := newLazyUnionReader(rc)
n, err := subject.ReadAt(tt.dst, tt.off)
assert.Equal(t, tt.wantN, n)
assert.Equal(t, string(tt.wantBytes), string(tt.dst[:tt.wantN]))
if tt.wantEOF {
assert.ErrorIs(t, err, io.EOF)
}
})
}
}
func Test_lazyUnionReader_Seek(t *testing.T) {
//const seek = 0
//const read = 1
type command struct {
seekOffset int64
seekWhence int
readDst []byte
}
data := []byte("this is a string of data that I'm very excited to share")
tests := []struct {
name string
commands []command
wantBytes []byte
wantEOF bool
}{
{
name: "read the first 4 bytes twice",
commands: []command{
{
readDst: make([]byte, 4),
},
{
seekOffset: 0,
seekWhence: io.SeekStart,
},
{
readDst: make([]byte, 4),
},
},
wantBytes: []byte("thisthis"),
},
{
name: "read the last 4 bytes twice",
commands: []command{
{
seekWhence: io.SeekEnd,
seekOffset: -4,
},
{
readDst: make([]byte, 4),
},
{
seekWhence: io.SeekEnd,
seekOffset: -4,
},
{
readDst: make([]byte, 4),
},
},
wantBytes: []byte("harehare"),
},
{
name: "read 4, skip 4, read 4",
commands: []command{
{readDst: make([]byte, 4)},
{seekOffset: 4, seekWhence: io.SeekCurrent},
{readDst: make([]byte, 4)},
},
wantBytes: []byte("thisa st"),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
rc := io.NopCloser(bytes.NewReader(data))
subject := newLazyUnionReader(rc)
var readSeekErr error
var readResult []byte
for _, c := range tt.commands {
var n int
if len(c.readDst) > 0 {
n, readSeekErr = subject.Read(c.readDst)
readResult = append(readResult, c.readDst[:n]...)
} else {
_, readSeekErr = subject.Seek(c.seekOffset, c.seekWhence)
}
}
if tt.wantEOF {
assert.ErrorIs(t, readSeekErr, io.EOF)
}
assert.Equal(t, string(tt.wantBytes), string(readResult))
})
}
}
+1 -21
View File
@@ -1,8 +1,6 @@
package unionreader
import (
"bytes"
"fmt"
"io"
macho "github.com/anchore/go-macholibre"
@@ -43,23 +41,5 @@ func GetUnionReader(readerCloser io.ReadCloser) (UnionReader, error) {
if ok {
return reader, nil
}
b, err := io.ReadAll(readerCloser)
if err != nil {
return nil, fmt.Errorf("unable to read contents from binary: %w", err)
}
bytesReader := bytes.NewReader(b)
reader = struct {
io.ReadCloser
io.ReaderAt
io.Seeker
}{
ReadCloser: io.NopCloser(bytesReader),
ReaderAt: bytesReader,
Seeker: bytesReader,
}
return reader, nil
return newLazyUnionReader(readerCloser), nil
}
@@ -1,16 +1,9 @@
{
"ecosystems": {
"jenkins_plugins": {
"DotCi": "cpe:2.3:a:jenkins:dotci:*:*:*:*:*:jenkins:*:*",
"JDK_Parameter_Plugin": "cpe:2.3:a:jenkins:jdk_parameter:*:*:*:*:*:jenkins:*:*",
"TestComplete": "cpe:2.3:a:jenkins:testcomplete_support:*:*:*:*:*:jenkins:*:*",
"TestFairy": "cpe:2.3:a:jenkins:testfairy:*:*:*:*:*:jenkins:*:*",
"absint-a3": "cpe:2.3:a:jenkins:absint_a3:*:*:*:*:*:jenkins:*:*",
"absint-astree": "cpe:2.3:a:jenkins:absint_astree:*:*:*:*:*:jenkins:*:*",
"accurev": "cpe:2.3:a:microfocus:accurev:*:*:*:*:*:jenkins:*:*",
"accurev": "cpe:2.3:a:jenkins:accurev:*:*:*:*:*:jenkins:*:*",
"active-choices": "cpe:2.3:a:jenkins:active_choices:*:*:*:*:*:jenkins:*:*",
"active-directory": "cpe:2.3:a:jenkins:active_directory:*:*:*:*:*:jenkins:*:*",
"agent-server-parameter": "cpe:2.3:a:jenkins:agent_server_parameter:*:*:*:*:*:jenkins:*:*",
"alauda-kubernetes-support": "cpe:2.3:a:jenkins:alauda_kubernetes_support:*:*:*:*:*:jenkins:*:*",
"analysis-core": "cpe:2.3:a:jenkins:static_analysis_utilities:*:*:*:*:*:jenkins:*:*",
"anchore-container-scanner": "cpe:2.3:a:jenkins:anchore_container_image_scanner:*:*:*:*:*:jenkins:*:*",
@@ -19,244 +12,129 @@
"ansible-tower": "cpe:2.3:a:jenkins:ansible_tower:*:*:*:*:*:jenkins:*:*",
"app-detector": "cpe:2.3:a:jenkins:application_detector:*:*:*:*:*:jenkins:*:*",
"appdynamics": "cpe:2.3:a:jenkins:appdynamics:*:*:*:*:*:jenkins:*:*",
"applatix": "cpe:2.3:a:jenkins:applatix:*:*:*:*:*:jenkins:*:*",
"apprenda": "cpe:2.3:a:jenkins:apprenda:*:*:*:*:*:jenkins:*:*",
"aqua-microscanner": "cpe:2.3:a:jenkins:aqua_microscanner:*:*:*:*:*:jenkins:*:*",
"aqua-security-scanner": "cpe:2.3:a:jenkins:aqua_security_scanner:*:*:*:*:*:jenkins:*:*",
"aqua-serverless": "cpe:2.3:a:jenkins:aqua_security_severless_scanner:*:*:*:*:*:jenkins:*:*",
"artifact-repository-parameter": "cpe:2.3:a:jenkins:artifact_repository_parameter:*:*:*:*:*:jenkins:*:*",
"assembla": "cpe:2.3:a:jenkins:assembla:*:*:*:*:*:jenkins:*:*",
"assembla-merge-request-builder": "cpe:2.3:a:jenkins:assembla_merge_request_builder:*:*:*:*:*:jenkins:*:*",
"atlassian-bitbucket-server-integration": "cpe:2.3:a:jenkins:bitbucket_server_integration:*:*:*:*:*:jenkins:*:*",
"audit-trail": "cpe:2.3:a:jenkins:audit_trail:*:*:*:*:*:jenkins:*:*",
"audit2db": "cpe:2.3:a:jenkins:audit_to_database:*:*:*:*:*:jenkins:*:*",
"autocomplete-parameter": "cpe:2.3:a:jenkins:autocomplete_parameter:*:*:*:*:*:jenkins:*:*",
"autonomiq": "cpe:2.3:a:jenkins:autonomiq:*:*:*:*:*:jenkins:*:*",
"avatar": "cpe:2.3:a:jenkins:avatar:*:*:*:*:*:jenkins:*:*",
"aws-beanstalk-publisher": "cpe:2.3:a:jenkins:aws_elastic_beanstalk_publisher:*:*:*:*:*:jenkins:*:*",
"aws-cloudwatch-logs-publisher": "cpe:2.3:a:jenkins:aws_cloudwatch_logs_publisher:*:*:*:*:*:jenkins:*:*",
"aws-codebuild": "cpe:2.3:a:jenkins:aws_codebuild:*:*:*:*:*:jenkins:*:*",
"aws-codecommit-trigger": "cpe:2.3:a:jenkins:aws_codecommit_trigger:*:*:*:*:*:jenkins:*:*",
"aws-codedeploy": "cpe:2.3:a:jenkins:aws_codedeploy:*:*:*:*:*:jenkins:*:*",
"aws-device-farm": "cpe:2.3:a:jenkins:aws-device-farm:*:*:*:*:*:jenkins:*:*",
"aws-global-configuration": "cpe:2.3:a:jenkins:aws_global_configuration:*:*:*:*:*:jenkins:*:*",
"aws-sam": "cpe:2.3:a:jenkins:amazon_web_services_service_application_model:*:*:*:*:*:jenkins:*:*",
"awseb-deployment": "cpe:2.3:a:jenkins:awseb_deployment:*:*:*:*:*:jenkins:*:*",
"azure-acs": "cpe:2.3:a:jenkins:azure_container_service:*:*:*:*:*:jenkins:*:*",
"azure-ad": "cpe:2.3:a:jenkins:azure_ad:*:*:*:*:*:jenkins:*:*",
"azure-keyvault": "cpe:2.3:a:jenkins:azure_key_vault:*:*:*:*:*:jenkins:*:*",
"azure-publishersettings-credentials": "cpe:2.3:a:jenkins:azure_publishersettings_credentials:*:*:*:*:*:jenkins:*:*",
"azure-vm-agents": "cpe:2.3:a:jenkins:azure_vm_agents:*:*:*:*:*:jenkins:*:*",
"backlog": "cpe:2.3:a:jenkins:backlog:*:*:*:*:*:jenkins:*:*",
"badge": "cpe:2.3:a:jenkins:badge:*:*:*:*:*:jenkins:*:*",
"batch-task": "cpe:2.3:a:jenkins:batch_task:*:*:*:*:*:jenkins:*:*",
"beaker-builder": "cpe:2.3:a:jenkins:beaker_builder:*:*:*:*:*:jenkins:*:*",
"bigpanda-jenkins": "cpe:2.3:a:jenkins:bigpanda_notifier:*:*:*:*:*:jenkins:*:*",
"bitbucket-approve": "cpe:2.3:a:jenkins:bitbucket_approve:*:*:*:*:*:jenkins:*:*",
"bitbucket-branch-source": "cpe:2.3:a:jenkins:bitbucket_branch_source:*:*:*:*:*:jenkins:*:*",
"bitbucket-oauth": "cpe:2.3:a:jenkins:bitbucket_oauth:*:*:*:*:*:jenkins:*:*",
"blackduck-detect": "cpe:2.3:a:jenkins:synopsys_detect:*:*:*:*:*:jenkins:*:*",
"blackduck-hub": "cpe:2.3:a:jenkins:black_duck_hub:*:*:*:*:*:jenkins:*:*",
"blueocean": "cpe:2.3:a:jenkins:blue_ocean:*:*:*:*:*:jenkins:*:*",
"bmc-rpd": "cpe:2.3:a:jenkins:bmc_release_package_and_deployment:*:*:*:*:*:jenkins:*:*",
"brakeman": "cpe:2.3:a:jenkins:brakeman:*:*:*:*:*:jenkins:*:*",
"bugzilla": "cpe:2.3:a:jenkins:bugzilla_plugin:*:*:*:*:*:jenkins:*:*",
"build-failure-analyzer": "cpe:2.3:a:jenkins:build_failure_analyzer:*:*:*:*:*:jenkins:*:*",
"build-metrics": "cpe:2.3:a:jenkins:build-metrics:*:*:*:*:*:jenkins:*:*",
"build-notifications": "cpe:2.3:a:jenkins:build_notifications:*:*:*:*:*:jenkins:*:*",
"build-pipeline": "cpe:2.3:a:jenkins:build_pipeline:*:*:*:*:*:jenkins:*:*",
"build-publisher": "cpe:2.3:a:jenkins:build-publisher:*:*:*:*:*:jenkins:*:*",
"build-with-parameters": "cpe:2.3:a:jenkins:build_with_parameters:*:*:*:*:*:jenkins:*:*",
"buildgraph-view": "cpe:2.3:a:jenkins:buildgraph-view:*:*:*:*:*:jenkins:*:*",
"cas": "cpe:2.3:a:jenkins:cas:*:*:*:*:*:jenkins:*:*",
"catalogic-ecx": "cpe:2.3:a:jenkins:ecx_copy_data_management:*:*:*:*:*:jenkins:*:*",
"cccc": "cpe:2.3:a:jenkins:cccc:*:*:*:*:*:jenkins:*:*",
"ccm": "cpe:2.3:a:jenkins:ccm:*:*:*:*:*:jenkins:*:*",
"checkmarx": "cpe:2.3:a:jenkins:checkmarx:*:*:*:*:*:jenkins:*:*",
"checkstyle": "cpe:2.3:a:jenkins:checkstyle:*:*:*:*:*:jenkins:*:*",
"chosen-views-tabbar": "cpe:2.3:a:jenkins:chosen-views-tabbar:*:*:*:*:*:jenkins:*:*",
"ci-with-toad-edge": "cpe:2.3:a:jenkins:continuous_integration_with_toad_edge:*:*:*:*:*:jenkins:*:*",
"cisco-spark": "cpe:2.3:a:jenkins:cisco_spark:*:*:*:*:*:jenkins:*:*",
"claim": "cpe:2.3:a:jenkins:claim:*:*:*:*:*:jenkins:*:*",
"clearcase-release": "cpe:2.3:a:jenkins:clearcase_release:*:*:*:*:*:jenkins:*:*",
"clif-performance-testing": "cpe:2.3:a:jenkins:clif_performance_testing:*:*:*:*:*:jenkins:*:*",
"cloud-stats": "cpe:2.3:a:jenkins:cloud_statistics:*:*:*:*:*:jenkins:*:*",
"cloudbees-folder": "cpe:2.3:a:jenkins:folders:*:*:*:*:*:jenkins:*:*",
"cloudbees-jenkins-advisor": "cpe:2.3:a:jenkins:health_advisor_by_cloudbees:*:*:*:*:*:jenkins:*:*",
"cloudcoreo-deploytime": "cpe:2.3:a:jenkins:cloudcoreo_deploytime:*:*:*:*:*:jenkins:*:*",
"cloudfoundry": "cpe:2.3:a:jenkins:cloud_foundry:*:*:*:*:*:jenkins:*:*",
"cloudshare-docker": "cpe:2.3:a:jenkins:cloudshare_docker-machine:*:*:*:*:*:jenkins:*:*",
"cloudtest": "cpe:2.3:a:jenkins:soasta_cloudtest:*:*:*:*:*:jenkins:*:*",
"cobertura": "cpe:2.3:a:jenkins:cobertura:*:*:*:*:*:jenkins:*:*",
"code-coverage-api": "cpe:2.3:a:jenkins:code_coverage_api:*:*:*:*:*:jenkins:*:*",
"codefresh": "cpe:2.3:a:jenkins:codefresh_integration:*:*:*:*:*:jenkins:*:*",
"codescan": "cpe:2.3:a:jenkins:codescan:*:*:*:*:*:jenkins:*:*",
"collabnet": "cpe:2.3:a:jenkins:collabnet:*:*:*:*:*:jenkins:*:*",
"compact-columns": "cpe:2.3:a:jenkins:compact_columns:*:*:*:*:*:jenkins:*:*",
"compatibility-action-storage": "cpe:2.3:a:praqma:compatibility_action_storage:*:*:*:*:*:jenkins:*:*",
"computer-queue": "cpe:2.3:a:jenkins:computer_queue:*:*:*:*:*:jenkins:*:*",
"compuware-common-configuration": "cpe:2.3:a:jenkins:compuware_common_configuration:*:*:*:*:*:jenkins:*:*",
"compuware-topaz-for-total-test": "cpe:2.3:a:jenkins:compuware_topaz_for_total_test:*:*:*:*:*:jenkins:*:*",
"config-file-provider": "cpe:2.3:a:jenkins:config_file_provider:*:*:*:*:*:jenkins:*:*",
"configuration-as-code": "cpe:2.3:a:jenkins:configuration_as_code:*:*:*:*:*:jenkins:*:*",
"configurationslicing": "cpe:2.3:a:jenkins:configuration_slicing:*:*:*:*:*:jenkins:*:*",
"confluence-publisher": "cpe:2.3:a:jenkins:confluence_publisher:*:*:*:*:*:jenkins:*:*",
"conjur-credentials": "cpe:2.3:a:jenkins:conjur_secrets:*:*:*:*:*:jenkins:*:*",
"cons3rt": "cpe:2.3:a:jenkins:cons3rt:*:*:*:*:*:jenkins:*:*",
"consul-kv-builder": "cpe:2.3:a:jenkins:consul_kv_builder:*:*:*:*:*:jenkins:*:*",
"convert-to-pipeline": "cpe:2.3:a:jenkins:convert_to_pipeline:*:*:*:*:*:jenkins:*:*",
"convertigo-mobile-platform": "cpe:2.3:a:jenkins:convertigo_mobile_platform:*:*:*:*:*:jenkins:*:*",
"copr": "cpe:2.3:a:jenkins:copr:*:*:*:*:*:jenkins:*:*",
"copy-data-to-workspace-plugin": "cpe:2.3:a:jenkins:copy_data_to_workspace:*:*:*:*:*:jenkins:*:*",
"copy-to-slave": "cpe:2.3:a:jenkins:copy_to_slave:*:*:*:*:*:jenkins:*:*",
"copyartifact": "cpe:2.3:a:jenkins:copy_artifact:*:*:*:*:*:jenkins:*:*",
"couchdb-statistics": "cpe:2.3:a:jenkins:couchdb-statistics:*:*:*:*:*:jenkins:*:*",
"covcomplplot": "cpe:2.3:a:jenkins:coverage\\/complexity_scatter_plot:*:*:*:*:*:jenkins:*:*",
"coverity": "cpe:2.3:a:jenkins:coverity:*:*:*:*:*:jenkins:*:*",
"cppcheck": "cpe:2.3:a:jenkins:cppcheck:*:*:*:*:*:jenkins:*:*",
"cppncss": "cpe:2.3:a:jenkins:cppncss:*:*:*:*:*:jenkins:*:*",
"crap4j": "cpe:2.3:a:jenkins:crap4j:*:*:*:*:*:jenkins:*:*",
"credentials": "cpe:2.3:a:jenkins:credentials:*:*:*:*:*:jenkins:*:*",
"credentials-binding": "cpe:2.3:a:jenkins:credentials_binding:*:*:*:*:*:jenkins:*:*",
"crittercism-dsym": "cpe:2.3:a:jenkins:crittercism-dsym:*:*:*:*:*:jenkins:*:*",
"crowd": "cpe:2.3:a:jenkins:crowd_integration:*:*:*:*:*:jenkins:*:*",
"crx-content-package-deployer": "cpe:2.3:a:jenkins:crx_content_package_deployer:*:*:*:*:*:jenkins:*:*",
"cryptomove": "cpe:2.3:a:jenkins:cryptomove:*:*:*:*:*:jenkins:*:*",
"cucumber-living-documentation": "cpe:2.3:a:jenkins:cucumber_living_documentation:*:*:*:*:*:jenkins:*:*",
"custom-checkbox-parameter": "cpe:2.3:a:jenkins:custom_checkbox_parameter:*:*:*:*:*:jenkins:*:*",
"custom-job-icon": "cpe:2.3:a:jenkins:custom_job_icon:*:*:*:*:*:jenkins:*:*",
"cvs": "cpe:2.3:a:jenkins:cvs:*:*:*:*:*:jenkins:*:*",
"cvs": "cpe:2.3:a:jenkins:current_versions_systems:*:*:*:*:*:jenkins:*:*",
"database": "cpe:2.3:a:jenkins:database:*:*:*:*:*:jenkins:*:*",
"datadog": "cpe:2.3:a:jenkins:datadog:*:*:*:*:*:jenkins:*:*",
"date-parameter": "cpe:2.3:a:jenkins:date_parameter:*:*:*:*:*:jenkins:*:*",
"dbCharts": "cpe:2.3:a:jenkins:dbcharts:*:*:*:*:*:jenkins:*:*",
"debian-package-builder": "cpe:2.3:a:jenkins:debian_package_builder:*:*:*:*:*:jenkins:*:*",
"delphix": "cpe:2.3:a:jenkins:delphix:*:*:*:*:*:jenkins:*:*",
"dependency-check": "cpe:2.3:a:jenkins:owasp_dependency-check:*:*:*:*:*:jenkins:*:*",
"dependency-track": "cpe:2.3:a:jenkins:owasp_dependency-track:*:*:*:*:*:jenkins:*:*",
"depgraph-view": "cpe:2.3:a:jenkins:dependency_graph_viewer:*:*:*:*:*:jenkins:*:*",
"deploy": "cpe:2.3:a:jenkins:deploy:*:*:*:*:*:jenkins:*:*",
"deployer-framework": "cpe:2.3:a:jenkins:deployer_framework:*:*:*:*:*:jenkins:*:*",
"deployhub": "cpe:2.3:a:jenkins:deployhub:*:*:*:*:*:jenkins:*:*",
"deployit-plugin": "cpe:2.3:a:jenkins:xebialabs_xl_deploy:*:*:*:*:*:jenkins:*:*",
"description-column": "cpe:2.3:a:jenkins:description_column:*:*:*:*:*:jenkins:*:*",
"diawi-upload": "cpe:2.3:a:jenkins:diawi_upload:*:*:*:*:*:jenkins:*:*",
"digitalocean-plugin": "cpe:2.3:a:jenkins:digitalocean:*:*:*:*:*:jenkins:*:*",
"dingding-json-pusher": "cpe:2.3:a:jenkins:dingding_json_pusher:*:*:*:*:*:jenkins:*:*",
"dingding-notifications": "cpe:2.3:a:jenkins:dingding:*:*:*:*:*:jenkins:*:*",
"distfork": "cpe:2.3:a:jenkins:distributed_fork:*:*:*:*:*:jenkins:*:*",
"docker": "cpe:2.3:a:jenkins:docker:*:*:*:*:*:jenkins:*:*",
"docker-commons": "cpe:2.3:a:jenkins:docker_commons:*:*:*:*:*:jenkins:*:*",
"docker-swarm": "cpe:2.3:a:jenkins:docker_swarm:*:*:*:*:*:jenkins:*:*",
"doktor": "cpe:2.3:a:jenkins:doktor:*:*:*:*:*:jenkins:*:*",
"dry": "cpe:2.3:a:jenkins:dry:*:*:*:*:*:jenkins:*:*",
"dynamic-extended-choice-parameter": "cpe:2.3:a:jenkins:dynamic_extended_choice_parameter:*:*:*:*:*:jenkins:*:*",
"dynatrace": "cpe:2.3:a:jenkins:dynatrace_application_monitoring:*:*:*:*:*:jenkins:*:*",
"eagle-tester": "cpe:2.3:a:jenkins:eagle_tester:*:*:*:*:*:jenkins:*:*",
"ease-plugin": "cpe:2.3:a:jenkins:digital.ai_app_management_publisher:*:*:*:*:*:jenkins:*:*",
"easyqa": "cpe:2.3:a:jenkins:easyqa:*:*:*:*:*:jenkins:*:*",
"ec2": "cpe:2.3:a:jenkins:ec2:*:*:*:*:*:jenkins:*:*",
"ec2-deployment-dashboard": "cpe:2.3:a:jenkins:deployment_dashboard:*:*:*:*:*:jenkins:*:*",
"echarts-api": "cpe:2.3:a:jenkins:echarts_api:*:*:*:*:*:jenkins:*:*",
"ecs-publisher": "cpe:2.3:a:trustsource:ecs_publisher:*:*:*:*:*:jenkins:*:*",
"ecutest": "cpe:2.3:a:jenkins:tracetronic_ecu-test:*:*:*:*:*:jenkins:*:*",
"eggplant": "cpe:2.3:a:jenkins:eggplant:*:*:*:*:*:jenkins:*:*",
"elastest": "cpe:2.3:a:jenkins:elastest:*:*:*:*:*:jenkins:*:*",
"elasticbox": "cpe:2.3:a:jenkins:elasticbox_ci:*:*:*:*:*:jenkins:*:*",
"elasticsearch-query": "cpe:2.3:a:jenkins:elasticsearch_query:*:*:*:*:*:jenkins:*:*",
"electricflow": "cpe:2.3:a:jenkins:electricflow:*:*:*:*:*:jenkins:*:*",
"eloyente": "cpe:2.3:a:jenkins:eloyente:*:*:*:*:*:jenkins:*:*",
"email-ext": "cpe:2.3:a:jenkins:email_extension:*:*:*:*:*:jenkins:*:*",
"emailext-template": "cpe:2.3:a:jenkins:email_extension_template:*:*:*:*:*:jenkins:*:*",
"embeddable-build-status": "cpe:2.3:a:jenkins:embeddable_build_status:*:*:*:*:*:jenkins:*:*",
"embotics-vcommander": "cpe:2.3:a:jenkins:snow_commander:*:*:*:*:*:jenkins:*:*",
"environment-dashboard": "cpe:2.3:a:jenkins:environment_dashboard:*:*:*:*:*:jenkins:*:*",
"environment-manager-tools": "cpe:2.3:a:jenkins:parasoft_environment_manager:*:*:*:*:*:jenkins:*:*",
"extensivetesting": "cpe:2.3:a:jenkins:extensive_testing:*:*:*:*:*:jenkins:*:*",
"external-monitor-job": "cpe:2.3:a:jenkins:external_monitor_job_type:*:*:*:*:*:jenkins:*:*",
"extra-columns": "cpe:2.3:a:jenkins:extra_columns:*:*:*:*:*:jenkins:*:*",
"extreme-feedback": "cpe:2.3:a:jenkins:extreme-feedback:*:*:*:*:*:jenkins:*:*",
"fabric-beta-publisher": "cpe:2.3:a:jenkins:fabric_beta_publisher:*:*:*:*:*:jenkins:*:*",
"failedJobDeactivator": "cpe:2.3:a:jenkins:failed_job_deactivator:*:*:*:*:*:jenkins:*:*",
"favorite": "cpe:2.3:a:jenkins:favorite_plugin:*:*:*:*:*:jenkins:*:*",
"filesystem-list-parameter-plugin": "cpe:2.3:a:jenkins:filesystem_list_parameter:*:*:*:*:*:jenkins:*:*",
"filesystem_scm": "cpe:2.3:a:jenkins:file_system_scm:*:*:*:*:*:jenkins:*:*",
"findbugs": "cpe:2.3:a:jenkins:findbugs:*:*:*:*:*:jenkins:*:*",
"fireline": "cpe:2.3:a:jenkins:360_fireline:*:*:*:*:*:jenkins:*:*",
"fitnesse": "cpe:2.3:a:jenkins:fitnesse:*:*:*:*:*:jenkins:*:*",
"flaky-test-handler": "cpe:2.3:a:jenkins:flaky_test_handler:*:*:*:*:*:jenkins:*:*",
"fogbugz": "cpe:2.3:a:jenkins:fogbugz:*:*:*:*:*:jenkins:*:*",
"fortify": "cpe:2.3:a:jenkins:fortify:*:*:*:*:*:jenkins:*:*",
"fortify-cloudscan-jenkins-plugin": "cpe:2.3:a:jenkins:fortify_cloudscan:*:*:*:*:*:jenkins:*:.",
"flaky-test-handler": "cpe:2.3:a:jenkins:flaky_test_handler:*:*:*:*:*:*:*:*",
"fortify-on-demand-uploader": "cpe:2.3:a:jenkins:fortify_on_demand_uploader:*:*:*:*:*:jenkins:*:*",
"frugal-testing": "cpe:2.3:a:jenkins:frugal_testing:*:*:*:*:*:jenkins:*:*",
"ftppublisher": "cpe:2.3:a:jenkins:ftp_publisher:*:*:*:*:*:jenkins:*:*",
"gatling": "cpe:2.3:a:jenkins:gatling:*:*:*:*:*:jenkins:*:*",
"gearman-plugin": "cpe:2.3:a:jenkins:gearman:*:*:*:*:*:jenkins:*:*",
"gem-publisher": "cpe:2.3:a:jenkins:gem_publisher:*:*:*:*:*:jenkins:*:*",
"gerrit-trigger": "cpe:2.3:a:jenkins:gerrit_trigger:*:*:*:*:*:jenkins:*:*",
"ghprb": "cpe:2.3:a:jenkins:github_pull_request_builder:*:*:*:*:*:jenkins:*:*",
"git": "cpe:2.3:a:jenkins:git:*:*:*:*:*:jenkins:*:*",
"git-changelog": "cpe:2.3:a:jenkins:git_changelog:*:*:*:*:*:jenkins:*:*",
"git-parameter": "cpe:2.3:a:jenkins:git_parameter:*:*:*:*:*:jenkins:*:*",
"git-server": "cpe:2.3:a:jenkins:git_server:*:*:*:*:*:jenkins:*:*",
"gitea": "cpe:2.3:a:gitea:gitea:*:*:*:*:*:jenkins:*:*",
"github": "cpe:2.3:a:jenkins:github:*:*:*:*:*:jenkins:*:*",
"github-branch-source": "cpe:2.3:a:jenkins:github_branch_source:*:*:*:*:*:jenkins:*:*",
"github-coverage-reporter": "cpe:2.3:a:jenkins:github_coverage_reporter:*:*:*:*:*:jenkins:*:*",
"github-oauth": "cpe:2.3:a:jenkins:github_oauth:*:*:*:*:*:jenkins:*:*",
"gitlab": "cpe:2.3:a:jenkins:gitlab:*:*:*:*:*:jenkins:*:*",
"gitlab-hook": "cpe:2.3:a:jenkins:gitlab_hook:*:*:*:*:*:jenkins:*:*",
"gitlab-oauth": "cpe:2.3:a:jenkins:gitlab_oauth:*:*:*:*:*:jenkins:*:*",
"global-build-stats": "cpe:2.3:a:jenkins:global-build-stats:*:*:*:*:*:jenkins:*:*",
"global-post-script": "cpe:2.3:a:jenkins:global_post_script:*:*:*:*:*:jenkins:*:*",
"global-variable-string-parameter": "cpe:2.3:a:jenkins:global_variable_string_parameter:*:*:*:*:*:jenkins:*:*",
"gogs-webhook": "cpe:2.3:a:jenkins:gogs:*:*:*:*:*:jenkins:*:*",
"google-compute-engine": "cpe:2.3:a:jenkins:google_compute_engine:*:*:*:*:*:jenkins:*:*",
"google-kubernetes-engine": "cpe:2.3:a:jenkins:google_kubernetes_engine:*:*:*:*:*:jenkins:*:*",
"google-login": "cpe:2.3:a:jenkins:google_login:*:*:*:*:*:jenkins:*:*",
"google-oauth": "cpe:2.3:a:jenkins:google_oauth_credentials:*:*:*:*:*:jenkins:*:*",
"google-play-android-publisher": "cpe:2.3:a:jenkins:google-play-android-publisher:*:*:*:*:*:jenkins:*:*",
"gradle": "cpe:2.3:a:jenkins:gradle:*:*:*:*:*:jenkins:*:*",
"groovy": "cpe:2.3:a:jenkins:groovy:*:*:*:*:*:jenkins:*:*",
"groovy-postbuild": "cpe:2.3:a:jenkins:groovy_postbuild:*:*:*:*:*:jenkins:*:*",
"harvest": "cpe:2.3:a:jenkins:harvest_scm:*:*:*:*:*:jenkins:*:*",
"hashicorp-vault-plugin": "cpe:2.3:a:jenkins:hashicorp_vault:*:*:*:*:*:jenkins:*:*",
"hidden-parameter": "cpe:2.3:a:jenkins:hidden_parameter:*:*:*:*:*:jenkins:*:*",
"hipchat": "cpe:2.3:a:atlassian:hipchat:*:*:*:*:*:jenkins:*:*",
"hockeyapp": "cpe:2.3:a:jenkins:hockeyapp:*:*:*:*:*:jenkins:*:*",
"hp-quality-center": "cpe:2.3:a:hp_application_lifecycle_management_quality_center_project:hp_application_lifecycle_management_quality_center:*:*:*:*:*:jenkins:*:*",
"hpe-network-virtualization": "cpe:2.3:a:jenkins:hpe_network_virtualization:*:*:*:*:*:jenkins:*:*",
"htmlpublisher": "cpe:2.3:a:jenkins:html_publisher:*:*:*:*:*:jenkins:*:*",
"htmlresource": "cpe:2.3:a:jenkins:html_resource:*:*:*:*:*:*:*:*",
"http-request": "cpe:2.3:a:jenkins:http_request:*:*:*:*:*:jenkins:*:*",
"hyper-commons": "cpe:2.3:a:jenkins:hyper.sh_commons:*:*:*:*:*:jenkins:*:*",
"ibm-asoc": "cpe:2.3:a:jenkins:ibm_application_security_on_cloud:*:*:*:*:*:jenkins:*:*",
"icescrum": "cpe:2.3:a:jenkins:icescrum:*:*:*:*:*:jenkins:*:*",
"image-gallery": "cpe:2.3:a:jenkins:image_gallery:*:*:*:*:*:jenkins:*:*",
"image-tag-parameter": "cpe:2.3:a:jenkins:image_tag_parameter:*:*:*:*:*:jenkins:*:*",
"implied-labels": "cpe:2.3:a:jenkins:implied_labels:*:*:*:*:*:jenkins:*:*",
"incapptic-connect-uploader": "cpe:2.3:a:jenkins:incapptic_connect_uploader:*:*:*:*:*:jenkins:*:*",
"inedo-buildmaster": "cpe:2.3:a:jenkins:inedo_buildmaster:*:*:*:*:*:jenkins:*:*",
"inedo-proget": "cpe:2.3:a:jenkins:inedo_proget:*:*:*:*:*:jenkins:*:*",
"influxdb": "cpe:2.3:a:eficode:influxdb:*:*:*:*:*:jenkins:*:*",
"instant-messaging": "cpe:2.3:a:jenkins:instant-messaging:*:*:*:*:*:jenkins:*:*",
"ircbot": "cpe:2.3:a:jenkins:irc:*:*:*:*:*:jenkins:*:*",
"ivy": "cpe:2.3:a:jenkins:ivy:*:*:*:*:*:jenkins:*:*",
"jabber": "cpe:2.3:a:jenkins:jabber_\\(xmpp\\)_notifier_and_control:*:*:*:*:*:jenkins:*:*",
"jabber-server-plugin": "cpe:2.3:a:jenkins:jabber_server:*:*:*:*:*:jenkins:*:*",
"jacoco": "cpe:2.3:a:jenkins:jacoco:*:*:*:*:*:jenkins:*:*",
"jclouds": "cpe:2.3:a:jenkins:jclouds:*:*:*:*:*:jenkins:*:*",
"jenkins-cloudformation": "cpe:2.3:a:jenkins:jenkins-cloudformation-plugin:*:*:*:*:*:jenkins:*:*",
"jenkins-multijob-plugin": "cpe:2.3:a:jenkins:multijob:*:*:*:*:*:jenkins:*:*",
"jenkins-reviewbot": "cpe:2.3:a:jenkins:jenkins-reviewbot:*:*:*:*:*:jenkins:*:*",
"jenkinsci-appspider-plugin": "cpe:2.3:a:jenkins:appspider:*:*:*:*:*:jenkins:*:*",
"jianliao": "cpe:2.3:a:jenkins:jianliao_notification:*:*:*:*:*:jenkins:*:*",
"jigomerge": "cpe:2.3:a:jenkins:jigomerge:*:*:*:*:*:jenkins:*:*",
"jira": "cpe:2.3:a:jenkins:jira:*:*:*:*:*:*:*:*",
"jira-ext": "cpe:2.3:a:jenkins:jira-ext:*:*:*:*:*:jenkins:*:*",
"jira": "cpe:2.3:a:jenkins:jira:*:*:*:*:*:jenkins:*:*",
"jira-issue-updater": "cpe:2.3:a:jenkins:jira_issue_updater:*:*:*:*:*:jenkins:*:*",
"jira-steps": "cpe:2.3:a:jenkins:jira_pipeline_steps:*:*:*:*:*:jenkins:*:*",
"job-dsl": "cpe:2.3:a:jenkins:job_dsl:*:*:*:*:*:jenkins:*:*",
"job-import": "cpe:2.3:a:jenkins:job_import:*:*:*:*:*:jenkins:*:*",
"jobConfigHistory": "cpe:2.3:a:jobconfighistory_project:jobconfighistory:*:*:*:*:*:jenkins:*:*",
@@ -265,49 +143,32 @@
"junit": "cpe:2.3:a:jenkins:junit:*:*:*:*:*:jenkins:*:*",
"jx-resources": "cpe:2.3:a:jenkins:jx_resources:*:*:*:*:*:jenkins:*:*",
"kanboard": "cpe:2.3:a:jenkins:kanboard:*:*:*:*:*:jenkins:*:*",
"kiuwanJenkinsPlugin": "cpe:2.3:a:jenkins:kiuwan:*:*:*:*:*:jenkins:*:*",
"klaros-testmanagement": "cpe:2.3:a:jenkins:klaros-testmanagement:*:*:*:*:*:jenkins:*:*",
"klocwork": "cpe:2.3:a:jenkins:klocwork_analysis:*:*:*:*:*:jenkins:*:*",
"kmap-jenkins": "cpe:2.3:a:jenkins:kmap:*:*:*:*:*:jenkins:*:*",
"koji": "cpe:2.3:a:jenkins:koji:*:*:*:*:*:jenkins:*:*",
"kubernetes": "cpe:2.3:a:jenkins:kubernetes:*:*:*:*:*:jenkins:*:*",
"kubernetes-cd": "cpe:2.3:a:jenkins:kubernetes_continuous_deploy:*:*:*:*:*:jenkins:*:*",
"kubernetes-ci": "cpe:2.3:a:jenkins:kubernetes_ci:*:*:*:*:*:jenkins:*:*",
"kubernetes-pipeline": "cpe:2.3:a:jenkins:kubernetes_pipeline:*:*:*:*:*:jenkins:*:*",
"labmanager": "cpe:2.3:a:jenkins:vmware_lab_manager_slaves:*:*:*:*:*:jenkins:*:*",
"lambdatest-automation": "cpe:2.3:a:jenkins:lambdatest-automation:*:*:*:*:*:jenkins:*:*",
"libvirt-slave": "cpe:2.3:a:jenkins:libvirt_slaves:*:*:*:*:*:jenkins:*:*",
"link-column": "cpe:2.3:a:jenkins:link_column:*:*:*:*:*:jenkins:*:*",
"liquibase-runner": "cpe:2.3:a:jenkins:liquibase_runner:*:*:*:*:*:jenkins:*:*",
"list-git-branches-parameter": "cpe:2.3:a:jenkins:list_git_branches_parameter:*:*:*:*:*:jenkins:*:*",
"literate": "cpe:2.3:a:jenkins:literate:*:*:*:*:*:jenkins:*:*",
"lockable-resources": "cpe:2.3:a:jenkins:lockable_resources:*:*:*:*:*:jenkins:*:*",
"locked-files-report": "cpe:2.3:a:jenkins:locked_files_report:*:*:*:*:*:jenkins:*:*",
"log-parser": "cpe:2.3:a:jenkins:log_parser:*:*:*:*:*:jenkins:*:*",
"logstash": "cpe:2.3:a:jenkins:logstash:*:*:*:*:*:jenkins:*:*",
"m2release": "cpe:2.3:a:jenkins:m2release:*:*:*:*:*:jenkins:*:*",
"mabl-integration": "cpe:2.3:a:jenkins:mabl:*:*:*:*:*:jenkins:*:*",
"mac": "cpe:2.3:a:jenkins:mac:*:*:*:*:*:jenkins:*:*",
"mail-commander": "cpe:2.3:a:jenkins:mail_commander:*:*:*:*:*:jenkins:*:*",
"mailer": "cpe:2.3:a:jenkins:mailer:*:*:*:*:*:*:*:*",
"mantis": "cpe:2.3:a:jenkins:mantis:*:*:*:*:*:jenkins:*:*",
"mashup-portlets": "cpe:2.3:a:jenkins:mashup_portlets:*:*:*:*:*:jenkins:*:*",
"mask-passwords": "cpe:2.3:a:jenkins:mask_passwords:*:*:*:*:*:jenkins:*:*",
"mathworks-polyspace": "cpe:2.3:a:jenkins:mathworks_polyspace:*:*:*:*:*:jenkins:*:*",
"matrix-auth": "cpe:2.3:a:jenkins:matrix_authorization_strategy:*:*:*:*:*:jenkins:*:*",
"matrix-project": "cpe:2.3:a:jenkins:matrix_project:*:*:*:*:*:jenkins:*:*",
"matrix-reloaded": "cpe:2.3:a:jenkins:matrix_reloaded:*:*:*:*:*:jenkins:*:*",
"mattermost": "cpe:2.3:a:jenkins:mattermost_notification:*:*:*:*:*:jenkins:*:*",
"maven": "cpe:2.3:a:jenkins:maven:*:*:*:*:*:jenkins:*:*",
"maven-artifact-choicelistprovider": "cpe:2.3:a:jenkins:maven_artifact_choicelistprovider_\\(nexus\\):*:*:*:*:*:jenkins:*:*",
"maven-metadata-plugin": "cpe:2.3:a:jenkins:maven_metadata:*:*:*:*:*:jenkins:*:*",
"maven-release-cascade": "cpe:2.3:a:barchart:maven_cascade_release:*:*:*:*:*:jenkins:*:*",
"meliora-testlab": "cpe:2.3:a:jenkins:meliora_testlab:*:*:*:*:*:jenkins:*:*",
"mercurial": "cpe:2.3:a:jenkins:mercurial:*:*:*:*:*:jenkins:*:*",
"mesos": "cpe:2.3:a:apache:mesos:*:*:*:*:*:jenkins:*:*",
"metrics": "cpe:2.3:a:jenkins:metrics:*:*:*:*:*:jenkins:*:*",
"minio-storage": "cpe:2.3:a:jenkins:minio_storage:*:*:*:*:*:jenkins:*:*",
"miniorange-saml-sp": "cpe:2.3:a:jenkins:saml_single_sign_on:*:*:*:*:*:jenkins:*:*",
"mongodb": "cpe:2.3:a:jenkins:mongodb:*:*:*:*:*:jenkins:*:*",
"monitoring": "cpe:2.3:a:jenkins:monitoring:*:*:*:*:*:jenkins:*:*",
"neoload": "cpe:2.3:a:jenkins:neoload:*:*:*:*:*:jenkins:*:*",
@@ -315,17 +176,8 @@
"nested-view": "cpe:2.3:a:jenkins:nested_view:*:*:*:*:*:jenkins:*:*",
"netsparker-cloud-scan": "cpe:2.3:a:jenkins:netsparker_cloud_scan:*:*:*:*:*:jenkins:*:*",
"nexus-platform": "cpe:2.3:a:jenkins:nexus_platform:*:*:*:*:*:jenkins:*:*",
"nodelabelparameter": "cpe:2.3:a:jenkins:node_and_label_parameter:*:*:*:*:*:jenkins:*:*",
"nomad": "cpe:2.3:a:jenkins:nomad:*:*:*:*:*:jenkins:*:*",
"octoperf": "cpe:2.3:a:jenkins:octoperf_load_testing:*:*:*:*:*:jenkins:*:*",
"oic-auth": "cpe:2.3:a:jenkins:openid_connect_authentication:*:*:*:*:*:jenkins:*:*",
"ontrack": "cpe:2.3:a:jenkins:ontrack:*:*:*:*:*:jenkins:*:*",
"open-stf": "cpe:2.3:a:jenkins:open_stf:*:*:*:*:*:jenkins:*:*",
"openid": "cpe:2.3:a:jenkins:openid:*:*:*:*:*:jenkins:*:*",
"openshift-deployer": "cpe:2.3:a:jenkins:openshift_deployer:*:*:*:*:*:jenkins:*:*",
"openshift-pipeline": "cpe:2.3:a:jenkins:openshift_pipeline:*:*:*:*:*:jenkins:*:*",
"openstack-cloud": "cpe:2.3:a:jenkins:openstack_cloud:*:*:*:*:*:jenkins:*:*",
"opsgenie": "cpe:2.3:a:jenkins:opsgenie:*:*:*:*:*:jenkins:*:*",
"ownership": "cpe:2.3:a:jenkins:job_and_node_ownership:*:*:*:*:*:jenkins:*:*",
"p4": "cpe:2.3:a:jenkins:p4:*:*:*:*:*:jenkins:*:*",
"pam-auth": "cpe:2.3:a:jenkins:pluggable_authentication_module:*:*:*:*:*:jenkins:*:*",
@@ -335,186 +187,98 @@
"parasoft-findings": "cpe:2.3:a:jenkins:parasoft_findings:*:*:*:*:*:jenkins:*:*",
"pegdown-formatter": "cpe:2.3:a:jenkins:pegdown_formatter:*:*:*:*:*:jenkins:*:*",
"perfecto": "cpe:2.3:a:jenkins:perfecto:*:*:*:*:*:jenkins:*:*",
"perfectomobile": "cpe:2.3:a:jenkins:perfecto_mobile:*:*:*:*:*:jenkins:*:*",
"performance": "cpe:2.3:a:jenkins:performance:*:*:*:*:*:jenkins:*:*",
"periodicbackup": "cpe:2.3:a:jenkins:periodic_backup:*:*:*:*:*:jenkins:*:*",
"persona": "cpe:2.3:a:jenkins:persona:*:*:*:*:*:jenkins:*:*",
"phoenix-autotest": "cpe:2.3:a:jenkins:pipeline\\:_phoenix_autotest:*:*:*:*:*:jenkins:*:*",
"pipeline-aws": "cpe:2.3:a:jenkins:pipeline\\:_aws_steps:*:*:*:*:*:jenkins:*:*",
"pipeline-build-step": "cpe:2.3:a:jenkins:pipeline\\:_build_step:*:*:*:*:*:jenkins:*:*",
"pipeline-githubnotify-step": "cpe:2.3:a:jenkins:pipeline_github_notify_step:*:*:*:*:*:jenkins:*:*",
"pipeline-input-step": "cpe:2.3:a:jenkins:pipeline\\:input_step:*:*:*:*:*:jenkins:*:*",
"pipeline-maven": "cpe:2.3:a:jenkins:pipeline_maven_integration:*:*:*:*:*:jenkins:*:*",
"pipeline-model-definition": "cpe:2.3:a:jenkins:pipeline\\:_declarative:*:*:*:*:*:jenkins:*:*",
"pipeline-stage-view": "cpe:2.3:a:jenkins:stage_view:*:*:*:*:*:jenkins:*:*",
"play": "cpe:2.3:a:jenkins:play_framework:*:*:*:*:*:jenkins:*:*",
"plot": "cpe:2.3:a:jenkins:plot:*:*:*:*:*:jenkins:*:*",
"pmd": "cpe:2.3:a:jenkins:pmd:*:*:*:*:*:jenkins:*:*",
"pollscm": "cpe:2.3:a:jenkins:poll_scm:*:*:*:*:*:jenkins:*:*",
"pom2config": "cpe:2.3:a:jenkins:pom2config:*:*:*:*:*:jenkins:*:*",
"port-allocator": "cpe:2.3:a:jenkins:port_allocator:*:*:*:*:*:jenkins:*:*",
"project-inheritance": "cpe:2.3:a:jenkins:project_inheritance:*:*:*:*:*:jenkins:*:*",
"promoted-builds": "cpe:2.3:a:jenkins:promoted_builds:*:*:*:*:*:jenkins:*:*",
"promoted-builds-simple": "cpe:2.3:a:jenkins:promoted_builds_\\(simple\\):*:*:*:*:*:jenkins:*:*",
"proxmox": "cpe:2.3:a:jenkins:proxmox:*:*:*:*:*:jenkins:*:*",
"publish-over-cifs": "cpe:2.3:a:jenkins:publish_over_cifs:*:*:*:*:*:jenkins:*:*",
"publish-over-ftp": "cpe:2.3:a:jenkins:publish_over_ftp:*:*:*:*:*:jenkins:*:*",
"publish-over-ssh": "cpe:2.3:a:jenkins:publish_over_ssh:*:*:*:*:*:jenkins:*:*",
"puppet-enterprise-pipeline": "cpe:2.3:a:jenkins:puppet_enterprise_pipeline:*:*:*:*:*:jenkins:*:*",
"pwauth": "cpe:2.3:a:jenkins:pwauth_security_realm:*:*:*:*:*:jenkins:*:*",
"quality-gates": "cpe:2.3:a:jenkins:quality_gates:*:*:*:*:*:jenkins:*:*",
"quayio-trigger": "cpe:2.3:a:jenkins:quay.io_trigger:*:*:*:*:*:jenkins:*:*",
"queue-cleanup": "cpe:2.3:a:jenkins:queue_cleanup:*:*:*:*:*:jenkins:*:*",
"rabbitmq-consumer": "cpe:2.3:a:jenkins:rabbitmq_consumer:*:*:*:*:*:jenkins:*:*",
"radargun": "cpe:2.3:a:jenkins:radargun:*:*:*:*:*:jenkins:*:*",
"radiatorview": "cpe:2.3:a:jenkins:radiator_view:*:*:*:*:*:jenkins:*:*",
"random-string-parameter": "cpe:2.3:a:jenkins:random_string_parameter:*:*:*:*:*:jenkins:*:*",
"rapiddeploy": "cpe:2.3:a:jenkins:rapiddeploy:*:*:*:*:*:jenkins:*:*",
"rebuild": "cpe:2.3:a:rebuild_project:rebuild:*:*:*:*:*:jenkins:*:*",
"recipe": "cpe:2.3:a:jenkins:recipe:*:*:*:*:*:jenkins:*:*",
"redgate-sql-ci": "cpe:2.3:a:jenkins:redgate_sql_change_automation:*:*:*:*:*:jenkins:*:*",
"release-helper": "cpe:2.3:a:jenkins:release_helper:*:*:*:*:*:jenkins:*:*",
"relution-publisher": "cpe:2.3:a:jenkins:relution_enterprise_appstore_publisher:*:*:*:*:*:jenkins:*:*",
"remote-jobs-view": "cpe:2.3:a:jenkins:remote-jobs-view:*:*:*:*:*:jenkins:*:*",
"reportportal": "cpe:2.3:a:jenkins:report_portal:*:*:*:*:*:jenkins:*:*",
"repository-connector": "cpe:2.3:a:jenkins:repository_connector:*:*:*:*:*:jenkins:*:*",
"requests": "cpe:2.3:a:jenkins:requests:*:*:*:*:*:jenkins:*:*",
"resource-disposer": "cpe:2.3:a:jenkins:resource_disposer:*:*:*:*:*:jenkins:*:*",
"rest-list-parameter": "cpe:2.3:a:jenkins:rest_list_parameter:*:*:*:*:*:jenkins:*:*",
"rhnpush-plugin": "cpe:2.3:a:jenkins:rhnpush-plugin:*:*:*:*:*:jenkins:*:*",
"rich-text-publisher-plugin": "cpe:2.3:a:jenkins:rich_text_publisher:*:*:*:*:*:jenkins:*:*",
"robot": "cpe:2.3:a:jenkins:robot_framework:*:*:*:*:*:jenkins:*:*",
"rocketchatnotifier": "cpe:2.3:a:jenkins:rocketchat_notifier:*:*:*:*:*:jenkins:*:*",
"role-strategy": "cpe:2.3:a:jenkins:role-based_authorization_strategy:*:*:*:*:*:jenkins:*:*",
"rpmsign": "cpe:2.3:a:jenkins:rpmsign-plugin:*:*:*:*:*:jenkins:*:*",
"rqm-plugin": "cpe:2.3:a:jenkins:rqm:*:*:*:*:*:jenkins:*:*",
"rrod": "cpe:2.3:a:jenkins:request_rename_or_delete:*:*:*:*:*:jenkins:*:*",
"rundeck": "cpe:2.3:a:jenkins:rundeck:*:*:*:*:*:jenkins:*:*",
"s3": "cpe:2.3:a:jenkins:s3_publisher:*:*:*:*:*:jenkins:*:*",
"s3explorer": "cpe:2.3:a:jenkins:s3_explorer:*:*:*:*:*:jenkins:*:*",
"saltstack": "cpe:2.3:a:jenkins:saltstack:*:*:*:*:*:jenkins:*:*",
"sametime": "cpe:2.3:a:jenkins:sametime:*:*:*:*:*:jenkins:*:*",
"saml": "cpe:2.3:a:jenkins:saml:*:*:*:*:*:jenkins:*:*",
"sauce-ondemand": "cpe:2.3:a:jenkins:sauce_ondemand:*:*:*:*:*:jenkins:*:*",
"scm-filter-jervis": "cpe:2.3:a:jenkins:source_code_management_filter_jervis:*:*:*:*:*:jenkins:*:*",
"scm-httpclient": "cpe:2.3:a:jenkins:scm_httpclient:*:*:*:*:*:jenkins:*:*",
"scp": "cpe:2.3:a:jenkins:scp_publisher:*:*:*:*:*:jenkins:*:*",
"script-security": "cpe:2.3:a:jenkins:script_security:*:*:*:*:*:jenkins:*:*",
"scriptler": "cpe:2.3:a:jenkins:scriptler:*:*:*:*:*:jenkins:*:*",
"security-inspector": "cpe:2.3:a:jenkins:security_inspector:*:*:*:*:*:jenkins:*:*",
"selected-tests-executor": "cpe:2.3:a:jenkins:tests_selector:*:*:*:*:*:jenkins:*:*",
"selection-tasks-plugin": "cpe:2.3:a:jenkins:selection_tasks:*:*:*:*:*:jenkins:*:*",
"selenium": "cpe:2.3:a:jenkins:selenium:*:*:*:*:*:jenkins:*:*",
"seleniumhtmlreport": "cpe:2.3:a:jenkins:selenium_html_report:*:*:*:*:*:jenkins:*:*",
"servicenow-devops": "cpe:2.3:a:jenkins:servicenow_devops:*:*:*:*:*:jenkins:*:*",
"shared-objects": "cpe:2.3:a:jenkins:shared_objects:*:*:*:*:*:jenkins:*:*",
"shelve-project": "cpe:2.3:a:jenkins:shelve_project:*:*:*:*:*:jenkins:*:*",
"shortcut-job": "cpe:2.3:a:jenkins:shortcut_job:*:*:*:*:*:jenkins:*:*",
"sidebar-link": "cpe:2.3:a:jenkins:sidebar_link:*:*:*:*:*:jenkins:*:*",
"simple-travis-runner": "cpe:2.3:a:jenkins:simple_travis_pipeline_runner:*:*:*:*:*:jenkins:*:*",
"sinatra-chef-builder": "cpe:2.3:a:jenkins:chef_sinatra:*:*:*:*:*:jenkins:*:*",
"sitemonitor": "cpe:2.3:a:jenkins:sitemonitor:*:*:*:*:*:jenkins:*:*",
"skype-notifier": "cpe:2.3:a:jenkins:skype_notifier:*:*:*:*:*:jenkins:*:*",
"skytap-cloud": "cpe:2.3:a:jenkins:skytap_cloud_ci:*:*:*:*:*:jenkins:*:*",
"slack": "cpe:2.3:a:jenkins:slack_notification:*:*:*:*:*:jenkins:*:*",
"slack-uploader": "cpe:2.3:a:jenkins:slack_upload:*:*:*:*:*:jenkins:*:*",
"smalltest": "cpe:2.3:a:jenkins:smalltest:*:*:*:*:*:jenkins:*:*",
"sms": "cpe:2.3:a:jenkins:sms_notification:*:*:*:*:*:jenkins:*:*",
"snsnotify": "cpe:2.3:a:jenkins:amazon_sns_build_notifier:*:*:*:*:*:jenkins:*:*",
"soapui-pro-functional-testing": "cpe:2.3:a:jenkins:soapui_pro_functional_testing:*:*:*:*:*:jenkins:*:*",
"sofy-ai": "cpe:2.3:a:jenkins:sofy.ai:*:*:*:*:*:jenkins:*:*",
"sonar-gerrit": "cpe:2.3:a:jenkins:sonar_gerrit:*:*:*:*:*:jenkins:*:*",
"sonar-quality-gates": "cpe:2.3:a:jenkins:sonar_quality_gates:*:*:*:*:*:jenkins:*:*",
"sonargraph-integration": "cpe:2.3:a:jenkins:sonargraph_integration:*:*:*:*:*:jenkins:*:*",
"sonarqube": "cpe:2.3:a:sonarsource:sonarqube_scanner:*:*:*:*:*:jenkins:*:*",
"sounds": "cpe:2.3:a:jenkins:sounds:*:*:*:*:*:jenkins:*:*",
"speaks": "cpe:2.3:a:jenkins:speaks\\!:*:*:*:*:*:jenkins:*:*",
"splunk-devops": "cpe:2.3:a:jenkins:splunk:*:*:*:*:*:jenkins:*:*",
"spoonscript": "cpe:2.3:a:jenkins:turboscript:*:*:*:*:*:jenkins:*:*",
"sqlplus-script-runner": "cpe:2.3:a:jenkins:sqlplus_script_runner:*:*:*:*:*:jenkins:*:*",
"sra-deploy": "cpe:2.3:a:jenkins:serena_sra_deploy:*:*:*:*:*:jenkins:*:*",
"ssh": "cpe:2.3:a:jenkins:ssh:*:*:*:*:*:jenkins:*:*",
"ssh-agent": "cpe:2.3:a:jenkins:ssh_agent:*:*:*:*:*:jenkins:*:*",
"ssh-credentials": "cpe:2.3:a:jenkins:ssh_credentials:*:*:*:*:*:jenkins:*:*",
"ssh-slaves": "cpe:2.3:a:jenkins:ssh_slaves:*:*:*:*:*:jenkins:*:*",
"ssh2easy": "cpe:2.3:a:jenkins:ssh2_easy:*:*:*:*:*:jenkins:*:*",
"starteam": "cpe:2.3:a:jenkins:starteam:*:*:*:*:*:jenkins:*:*",
"storable-configs-plugin": "cpe:2.3:a:jenkins:storable_configs:*:*:*:*:*:jenkins:*:*",
"subversion": "cpe:2.3:a:jenkins-ci:subversion-plugin:*:*:*:*:*:*:*:*",
"sumologic-publisher": "cpe:2.3:a:jenkins:sumologic_publisher:*:*:*:*:*:jenkins:*:*",
"svn-partial-release-mgr": "cpe:2.3:a:jenkins:subversion_partial_release_manager:*:*:*:*:*:jenkins:*:*",
"svn-release-mgr": "cpe:2.3:a:jenkins:subversion_release_manager:*:*:*:*:*:jenkins:*:*",
"swamp": "cpe:2.3:a:jenkins:swamp:*:*:*:*:*:jenkins:*:*",
"swarm": "cpe:2.3:a:jenkins:self-organizing_swarm_modules:*:*:*:*:*:jenkins:*:*",
"synopsys-coverity": "cpe:2.3:a:jenkins:synopsys_coverity:*:*:*:*:*:jenkins:*:*",
"tap": "cpe:2.3:a:jenkins:tap:*:*:*:*:*:jenkins:*:*",
"teams-webhook-trigger": "cpe:2.3:a:jenkins:msteams_webhook_trigger:*:*:*:*:*:jenkins:*:*",
"templating-engine": "cpe:2.3:a:jenkins:templating_engine:*:*:*:*:*:jenkins:*:*",
"testlink": "cpe:2.3:a:jenkins:testlink:*:*:*:*:*:jenkins:*:*",
"testng-plugin": "cpe:2.3:a:jenkins:testng_results:*:*:*:*:*:jenkins:*:*",
"testquality-updater": "cpe:2.3:a:jenkins:testquality_updater:*:*:*:*:*:jenkins:*:*",
"tfs": "cpe:2.3:a:jenkins:team_foundation_server:*:*:*:*:*:jenkins:*:*",
"threadfix": "cpe:2.3:a:jenkins:threadfix:*:*:*:*:*:jenkins:*:*",
"thycotic-devops-secrets-vault": "cpe:2.3:a:jenkins:thycotic_devops_secrets_vault:*:*:*:*:*:jenkins:*:*",
"thycotic-secret-server": "cpe:2.3:a:jenkins:thycotic_secret_server:*:*:*:*:*:jenkins:*:*",
"tics": "cpe:2.3:a:jenkins:tics:*:*:*:*:*:jenkins:*:*",
"timestamper": "cpe:2.3:a:jenkins:timestamper:*:*:*:*:*:jenkins:*:*",
"tinfoil-scan": "cpe:2.3:a:jenkins:tinfoil_security:*:*:*:*:*:jenkins:*:*",
"token-macro": "cpe:2.3:a:jenkins:token_macro:*:*:*:*:*:jenkins:*:*",
"trac-publisher-plugin": "cpe:2.3:a:jenkins:trac_publisher:*:*:*:*:*:jenkins:*:*",
"translation": "cpe:2.3:a:jenkins:translation_assistance:*:*:*:*:*:jenkins:*:*",
"tuleap-oauth": "cpe:2.3:a:jenkins:tuleap_authentication:*:*:*:*:*:jenkins:*:*",
"twitter": "cpe:2.3:a:jenkins:twitter:*:*:*:*:*:jenkins:*:*",
"upload-pgyer": "cpe:2.3:a:jenkins:upload_to_pgyer:*:*:*:*:*:jenkins:*:*",
"urltrigger": "cpe:2.3:a:jenkins:urltrigger:*:*:*:*:*:jenkins:*:*",
"usemango-runner": "cpe:2.3:a:jenkins:usemango_runner:*:*:*:*:*:jenkins:*:*",
"valgrind": "cpe:2.3:a:jenkins:valgrind:*:*:*:*:*:jenkins:*:*",
"validating-email-parameter": "cpe:2.3:a:jenkins:validating_email_parameter:*:*:*:*:*:jenkins:*:*",
"validating-string-parameter": "cpe:2.3:a:jenkins:validating_string_parameter:*:*:*:*:*:jenkins:*:*",
"vault-scm-plugin": "cpe:2.3:a:jenkins:sourcegear_vault:*:*:*:*:*:jenkins:*:*",
"vboxwrapper": "cpe:2.3:a:jenkins:vboxwrapper:*:*:*:*:*:jenkins:*:*",
"veracode-scanner": "cpe:2.3:a:jenkins:veracode-scanner:*:*:*:*:*:jenkins:*:*",
"view-cloner": "cpe:2.3:a:jenkins:view-cloner:*:*:*:*:*:jenkins:*:*",
"view26": "cpe:2.3:a:jenkins:view26_test-reporting:*:*:*:*:*:jenkins:*:*",
"violation-comments-to-gitlab": "cpe:2.3:a:jenkins:violation_comments_to_gitlab:*:*:*:*:*:jenkins:*:*",
"visualexpert": "cpe:2.3:a:jenkins:visualexpert:*:*:*:*:*:jenkins:*:*",
"visualworks-store": "cpe:2.3:a:jenkins:visualworks_store:*:*:*:*:*:jenkins:*:*",
"vmware-vrealize-automation-plugin": "cpe:2.3:a:jenkins:vmware_vrealize_automation:*:*:*:*:*:jenkins:*:*",
"vmware-vrealize-orchestrator": "cpe:2.3:a:jenkins:vrealize_orchestrator:*:*:*:*:*:jenkins:*:*",
"vncrecorder": "cpe:2.3:a:jenkins:vncrecorder:*:*:*:*:*:jenkins:*:*",
"vncviewer": "cpe:2.3:a:jenkins:vncviewer:*:*:*:*:*:jenkins:*:*",
"vs-code-metrics": "cpe:2.3:a:jenkins:visual_studio_code_metrics:*:*:*:*:*:jenkins:*:*",
"vsphere-cloud": "cpe:2.3:a:jenkins:vsphere:*:*:*:*:*:jenkins:*:*",
"vsts-cd": "cpe:2.3:a:jenkins:vs_team_services_continuous_deployment:*:*:*:*:*:jenkins:*:*",
"walldisplay": "cpe:2.3:a:jenkins:wall_display:*:*:*:*:*:jenkins:*:*",
"walti": "cpe:2.3:a:jenkins:walti:*:*:*:*:*:jenkins:*:*",
"warnings": "cpe:2.3:a:jenkins:warnings:*:*:*:*:*:jenkins:*:*",
"warnings-ng": "cpe:2.3:a:jenkins:warnings_next_generation:*:*:*:*:*:jenkins:*:*",
"weblogic-deployer": "cpe:2.3:a:jenkins:deploy_weblogic:*:*:*:*:*:jenkins:*:*",
"websphere-deployer": "cpe:2.3:a:jenkins:websphere_deployer:*:*:*:*:*:jenkins:*:*",
"whitesource": "cpe:2.3:a:jenkins:white_source:*:*:*:*:*:jenkins:*:*",
"wildfly-deployer": "cpe:2.3:a:jenkins:wildfly_deployer:*:*:*:*:*:jenkins:*:*",
"windows-slaves": "cpe:2.3:a:jenkins:wmi_windows_agents:*:*:*:*:*:jenkins:*:*",
"workflow-cps": "cpe:2.3:a:jenkins:pipeline\\:_groovy:*:*:*:*:*:*:*:*",
"workflow-cps-global-lib": "cpe:2.3:a:jenkins:pipeline\\:shared_groovy_libraries:*:*:*:*:*:jenkins:*:*",
"workflow-multibranch": "cpe:2.3:a:jenkins:pipeline\\:_multibranch:*:*:*:*:*:jenkins:*:*",
"workflow-remote-loader": "cpe:2.3:a:jenkins:pipeline_remote_loader:*:*:*:*:*:jenkins:*:*",
"ws-execution-manager": "cpe:2.3:a:jenkins:worksoft_execution_manager:*:*:*:*:*:jenkins:*:*",
"wso2id-oauth": "cpe:2.3:a:jenkins:wso2_oauth:*:*:*:*:*:jenkins:*:*",
"xcode": "cpe:2.3:a:jenkins:xcode_integration:*:*:*:*:*:jenkins:*:*",
"xfpanel": "cpe:2.3:a:jenkins:extreme_feedback_panel:*:*:*:*:*:jenkins:*:*",
"xlrelease-plugin": "cpe:2.3:a:jenkins:xebialabs_xl_release:*:*:*:*:*:jenkins:*:*",
"xpath-config-viewer": "cpe:2.3:a:jenkins:xpath_configuration_viewer:*:*:*:*:*:jenkins:*:*",
"xray-connector": "cpe:2.3:a:jenkins:xray_-_test_management_for_jira:*:*:*:*:*:jenkins:*:*",
"xunit": "cpe:2.3:a:jenkins:xunit:*:*:*:*:*:jenkins:*:*",
"yaml-axis": "cpe:2.3:a:jenkins:yaml_axis:*:*:*:*:*:jenkins:*:*",
"yet-another-build-visualizer": "cpe:2.3:a:jenkins:yet_another_build_visualizer:*:*:*:*:*:*:*:*",
"youtrack": "cpe:2.3:a:jenkins:youtrack-plugin:*:*:*:*:*:jenkins:*:*",
"zap": "cpe:2.3:a:jenkins:owasp_zap:*:*:*:*:*:jenkins:*:*",
"zap-pipeline": "cpe:2.3:a:jenkins:zap_pipeline:*:*:*:*:*:jenkins:*:*",
"zephyr-enterprise-test-management": "cpe:2.3:a:jenkins:zephyr_enterprise_test_management:*:*:*:*:*:jenkins:*:*",
"zephyr-for-jira-test-management": "cpe:2.3:a:jenkins:zephyr_for_jira_test_management:*:*:*:*:*:jenkins:*:*",
"zos-connector": "cpe:2.3:a:jenkins:z\\/os_connector:*:*:*:*:*:jenkins:*:*",
"zulip": "cpe:2.3:a:jenkins:zulip:*:*:*:*:*:jenkins:*:*"
},
"npm": {
@@ -1266,19 +1030,6 @@
"zjjserver": "cpe:2.3:a:zjjserver_project:zjjserver:*:*:*:*:*:node.js:*:*",
"zwserver": "cpe:2.3:a:zwserver_project:zwserver:*:*:*:*:*:node.js:*:*"
},
"php_pear": {
"Archive_Tar": "cpe:2.3:a:php:pear_archive_tar:*:*:*:*:*:*:*:*",
"HTML_AJAX": "cpe:2.3:a:pear:html_ajax:*:*:*:*:*:*:*:*",
"HTML_QuickForm": "cpe:2.3:a:html_quickform_project:html_quickform:*:*:*:*:*:*:*:*",
"PEAR": "cpe:2.3:a:php:pear:*:*:*:*:*:*:*:*",
"XML_RPC": "cpe:2.3:a:php:xml_rpc:*:*:*:*:*:pear:*:*"
},
"php_pecl": {
"imagick": "cpe:2.3:a:php:imagick:*:*:*:*:*:*:*:*",
"memcached": "cpe:2.3:a:php:memcached:*:*:*:*:*:*:*:*",
"pecl_http": "cpe:2.3:a:php:pecl_http:*:*:*:*:*:*:*:*",
"xhprof": "cpe:2.3:a:php:xhprof:*:*:*:*:*:*:*:*"
},
"pypi": {
"0.0.1": "cpe:2.3:a:pypi:pypi:*:*:*:*:*:*:*:*",
"AAmiles": "cpe:2.3:a:pypi:aamiles:*:*:*:*:*:pypi:*:*",
@@ -101,18 +101,13 @@ func normalizeCPE(cpe *wfn.Attributes) *wfn.Attributes {
}
const (
prefixForNPMPackages = "https://www.npmjs.com/package/"
prefixForRubyGems = "https://rubygems.org/gems/"
prefixForRubyGemsHTTP = "http://rubygems.org/gems/"
prefixForNativeRubyGems = "https://github.com/ruby/"
prefixForPyPIPackages = "https://pypi.org/project/"
prefixForJenkinsPlugins = "https://plugins.jenkins.io/"
prefixForJenkinsPluginsGitHub = "https://github.com/jenkinsci/"
prefixForRustCrates = "https://crates.io/crates/"
prefixForPHPPear = "https://pear.php.net/"
prefixForPHPPearHTTP = "http://pear.php.net/"
prefixForPHPPecl = "https://pecl.php.net/"
prefixForPHPPeclHTTP = "http://pecl.php.net/"
prefixForNPMPackages = "https://www.npmjs.com/package/"
prefixForRubyGems = "https://rubygems.org/gems/"
prefixForRubyGemsHTTP = "http://rubygems.org/gems/"
prefixForNativeRubyGems = "https://github.com/ruby/"
prefixForPyPIPackages = "https://pypi.org/project/"
prefixForJenkinsPlugins = "https://github.com/jenkinsci/"
prefixForRustCrates = "https://crates.io/crates/"
)
// indexCPEList creates an index of CPEs by ecosystem.
@@ -140,21 +135,12 @@ func indexCPEList(list CpeList) *dictionary.Indexed {
case strings.HasPrefix(ref, prefixForPyPIPackages):
addEntryForPyPIPackage(indexed, ref, cpeItemName)
case strings.HasPrefix(ref, prefixForJenkinsPluginsGitHub):
// It _might_ be a jenkins plugin!
addEntryForJenkinsPluginGitHub(indexed, ref, cpeItemName)
case strings.HasPrefix(ref, prefixForJenkinsPlugins):
// It _might_ be a jenkins plugin!
addEntryForJenkinsPlugin(indexed, ref, cpeItemName)
case strings.HasPrefix(ref, prefixForRustCrates):
addEntryForRustCrate(indexed, ref, cpeItemName)
case strings.HasPrefix(ref, prefixForPHPPear), strings.HasPrefix(ref, prefixForPHPPearHTTP):
addEntryForPHPPearPackage(indexed, ref, cpeItemName)
case strings.HasPrefix(ref, prefixForPHPPecl), strings.HasPrefix(ref, prefixForPHPPeclHTTP):
addEntryForPHPPeclPackage(indexed, ref, cpeItemName)
}
}
}
@@ -174,9 +160,9 @@ func addEntryForRustCrate(indexed *dictionary.Indexed, ref string, cpeItemName s
indexed.EcosystemPackages[dictionary.EcosystemRustCrates][ref] = cpeItemName
}
func addEntryForJenkinsPluginGitHub(indexed *dictionary.Indexed, ref string, cpeItemName string) {
func addEntryForJenkinsPlugin(indexed *dictionary.Indexed, ref string, cpeItemName string) {
// Prune off the non-package-name parts of the URL
ref = strings.TrimPrefix(ref, prefixForJenkinsPluginsGitHub)
ref = strings.TrimPrefix(ref, prefixForJenkinsPlugins)
ref = strings.Split(ref, "/")[0]
if !strings.HasSuffix(ref, "-plugin") {
@@ -193,22 +179,6 @@ func addEntryForJenkinsPluginGitHub(indexed *dictionary.Indexed, ref string, cpe
indexed.EcosystemPackages[dictionary.EcosystemJenkinsPlugins][ref] = cpeItemName
}
func addEntryForJenkinsPlugin(indexed *dictionary.Indexed, ref string, cpeItemName string) {
// Prune off the non-package-name parts of the URL
ref = strings.TrimPrefix(ref, prefixForJenkinsPlugins)
ref = strings.Split(ref, "/")[0]
if ref == "" {
return
}
if _, ok := indexed.EcosystemPackages[dictionary.EcosystemJenkinsPlugins]; !ok {
indexed.EcosystemPackages[dictionary.EcosystemJenkinsPlugins] = make(dictionary.Packages)
}
indexed.EcosystemPackages[dictionary.EcosystemJenkinsPlugins][ref] = cpeItemName
}
func addEntryForPyPIPackage(indexed *dictionary.Indexed, ref string, cpeItemName string) {
// Prune off the non-package-name parts of the URL
ref = strings.TrimPrefix(ref, prefixForPyPIPackages)
@@ -258,63 +228,3 @@ func addEntryForNPMPackage(indexed *dictionary.Indexed, ref string, cpeItemName
indexed.EcosystemPackages[dictionary.EcosystemNPM][ref] = cpeItemName
}
func phpExtensionPackageFromURLFragment(ref string) string {
if strings.HasPrefix(ref, "package/") { // package/HTML_QuickForm/download
ref = strings.TrimPrefix(ref, "package/")
components := strings.Split(ref, "/")
if len(components) < 1 {
return ""
}
ref = components[0]
} else if strings.Contains(ref, "?package=") { // package-changelog.php?package=xhprof&amp;release=0.9.4
components := strings.Split(ref, "?package=")
if len(components) < 2 {
return ""
}
components = strings.Split(components[1], "&")
if len(components) < 2 {
return ""
}
ref = components[0]
}
return ref
}
func addEntryForPHPPearPackage(indexed *dictionary.Indexed, ref string, cpeItemName string) {
ref = strings.TrimPrefix(ref, prefixForPHPPear)
ref = strings.TrimPrefix(ref, prefixForPHPPearHTTP)
ref = phpExtensionPackageFromURLFragment(ref)
if ref == "" {
return
}
if _, ok := indexed.EcosystemPackages[dictionary.EcosystemPHPPear]; !ok {
indexed.EcosystemPackages[dictionary.EcosystemPHPPear] = make(dictionary.Packages)
}
indexed.EcosystemPackages[dictionary.EcosystemPHPPear][ref] = cpeItemName
}
func addEntryForPHPPeclPackage(indexed *dictionary.Indexed, ref string, cpeItemName string) {
ref = strings.TrimPrefix(ref, prefixForPHPPecl)
ref = strings.TrimPrefix(ref, prefixForPHPPeclHTTP)
ref = phpExtensionPackageFromURLFragment(ref)
if ref == "" {
return
}
if _, ok := indexed.EcosystemPackages[dictionary.EcosystemPHPPecl]; !ok {
indexed.EcosystemPackages[dictionary.EcosystemPHPPecl] = make(dictionary.Packages)
}
indexed.EcosystemPackages[dictionary.EcosystemPHPPecl][ref] = cpeItemName
}
@@ -65,8 +65,8 @@ func Test_addEntryFuncs(t *testing.T) {
},
},
{
name: "addEntryForJenkinsPluginGitHub",
addEntryFunc: addEntryForJenkinsPluginGitHub,
name: "addEntryForJenkinsPlugin",
addEntryFunc: addEntryForJenkinsPlugin,
inputRef: "https://github.com/jenkinsci/sonarqube-plugin",
inputCpeItemName: "cpe:2.3:a:sonarsource:sonarqube_scanner:2.7:*:*:*:*:jenkins:*:*",
expectedIndexed: dictionary.Indexed{
@@ -78,27 +78,14 @@ func Test_addEntryFuncs(t *testing.T) {
},
},
{
name: "addEntryForJenkinsPluginGitHub: not actually a plugin",
addEntryFunc: addEntryForJenkinsPluginGitHub,
name: "addEntryForJenkinsPlugin: not actually a plugin",
addEntryFunc: addEntryForJenkinsPlugin,
inputRef: "https://github.com/jenkinsci/jenkins",
inputCpeItemName: "cpe:2.3:a:jenkins:jenkinsci:2.7:*:*:*:*:*:*:*",
expectedIndexed: dictionary.Indexed{
EcosystemPackages: map[string]dictionary.Packages{},
},
},
{
name: "addEntryForJenkinsPlugin",
addEntryFunc: addEntryForJenkinsPlugin,
inputRef: "https://plugins.jenkins.io/svn-partial-release-mgr/release",
inputCpeItemName: "cpe:2.3:a:jenkins:_subversion_partial_release_manager:1.0.1:*:*:*:*:jenkins:*:*",
expectedIndexed: dictionary.Indexed{
EcosystemPackages: map[string]dictionary.Packages{
dictionary.EcosystemJenkinsPlugins: {
"svn-partial-release-mgr": "cpe:2.3:a:jenkins:_subversion_partial_release_manager:1.0.1:*:*:*:*:jenkins:*:*",
},
},
},
},
{
name: "addEntryForPyPIPackage",
addEntryFunc: addEntryForPyPIPackage,
@@ -164,58 +151,6 @@ func Test_addEntryFuncs(t *testing.T) {
},
},
},
{
name: "addEntryForPHPPeclPackage",
addEntryFunc: addEntryForPHPPeclPackage,
inputRef: "https://pecl.php.net/package/imagick/something/something/v4007.0",
inputCpeItemName: "cpe:2.3:a:php:imagick:*:*:*:*:*:*:*:*",
expectedIndexed: dictionary.Indexed{
EcosystemPackages: map[string]dictionary.Packages{
dictionary.EcosystemPHPPecl: {
"imagick": "cpe:2.3:a:php:imagick:*:*:*:*:*:*:*:*",
},
},
},
},
{
name: "addEntryForPHPPeclPackage http changelog",
addEntryFunc: addEntryForPHPPeclPackage,
inputRef: "http://pecl.php.net/package-changelog.php?package=memcached&amp;release",
inputCpeItemName: "cpe:2.3:a:php:memcached:*:*:*:*:*:*:*:*",
expectedIndexed: dictionary.Indexed{
EcosystemPackages: map[string]dictionary.Packages{
dictionary.EcosystemPHPPecl: {
"memcached": "cpe:2.3:a:php:memcached:*:*:*:*:*:*:*:*",
},
},
},
},
{
name: "addEntryForPHPPearPackage",
addEntryFunc: addEntryForPHPPearPackage,
inputRef: "https://pear.php.net/package/PEAR/download",
inputCpeItemName: "cpe:2.3:a:php:pear:*:*:*:*:*:*:*:*",
expectedIndexed: dictionary.Indexed{
EcosystemPackages: map[string]dictionary.Packages{
dictionary.EcosystemPHPPear: {
"PEAR": "cpe:2.3:a:php:pear:*:*:*:*:*:*:*:*",
},
},
},
},
{
name: "addEntryForPHPPearPackage http changelog",
addEntryFunc: addEntryForPHPPearPackage,
inputRef: "http://pear.php.net/package-changelog.php?package=abcdefg&amp;release",
inputCpeItemName: "cpe:2.3:a:php:abcdefg:*:*:*:*:*:*:*:*",
expectedIndexed: dictionary.Indexed{
EcosystemPackages: map[string]dictionary.Packages{
dictionary.EcosystemPHPPear: {
"abcdefg": "cpe:2.3:a:php:abcdefg:*:*:*:*:*:*:*:*",
},
},
},
},
}
for _, tt := range tests {
@@ -1,9 +1,7 @@
{
"ecosystems": {
"jenkins_plugins": {
"fireline": "cpe:2.3:a:jenkins:360_fireline:*:*:*:*:*:jenkins:*:*",
"sonarqube": "cpe:2.3:a:sonarsource:sonarqube_scanner:*:*:*:*:*:jenkins:*:*",
"svn-partial-release-mgr": "cpe:2.3:a:jenkins:_subversion_partial_release_manager:*:*:*:*:*:jenkins:*:*"
"sonarqube": "cpe:2.3:a:sonarsource:sonarqube_scanner:*:*:*:*:*:jenkins:*:*"
},
"npm": {
"merge-recursive": "cpe:2.3:a:umbraengineering:merge-recursive:*:*:*:*:*:node.js:*:*",
@@ -15,16 +13,6 @@
"unicode": "cpe:2.3:a:unicode_project:unicode:*:*:*:*:*:node.js:*:*",
"unicorn-list": "cpe:2.3:a:unicorn-list_project:unicorn-list:*:*:*:*:*:node.js:*:*"
},
"php_pear": {
"HTML_QuickForm": "cpe:2.3:a:html_quickform_project:html_quickform:*:*:*:*:*:*:*:*",
"PEAR": "cpe:2.3:a:php:pear:*:*:*:*:*:*:*:*",
"XML_RPC": "cpe:2.3:a:php:xml_rpc:*:*:*:*:*:pear:*:*"
},
"php_pecl": {
"imagick": "cpe:2.3:a:php:imagick:*:*:*:*:*:*:*:*",
"memcached": "cpe:2.3:a:php:memcached:*:*:*:*:*:*:*:*",
"xhprof": "cpe:2.3:a:php:xhprof:*:*:*:*:*:*:*:*"
},
"rubygems": {
"openssl": "cpe:2.3:a:ruby-lang:openssl:*:*:*:*:*:*:*:*"
},
@@ -24873,134 +24873,4 @@
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:zzzcms:zzzphp:2.1.0:*:*:*:*:*:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:php:xhprof:0.9.1">
<title xml:lang="en-US">PHP XHProf 0.9.1</title>
<references>
<reference href="http://pecl.php.net/package-changelog.php?package=xhprof&amp;release=0.9.4">product changelog</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:php:xhprof:0.9.1:*:*:*:*:*:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:php:xhprof:0.9.2">
<title xml:lang="en-US">PHP XHProf 0.9.2</title>
<references>
<reference href="http://pecl.php.net/package-changelog.php?package=xhprof&amp;release=0.9.4">product changelog</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:php:xhprof:0.9.2:*:*:*:*:*:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:php:xhprof:0.9.3">
<title xml:lang="en-US">PHP XHProf 0.9.3</title>
<references>
<reference href="http://pecl.php.net/package-changelog.php?package=xhprof&amp;release=0.9.4">product changelog</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:php:xhprof:0.9.3:*:*:*:*:*:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:php:memcached:0.1.0">
<title xml:lang="en-US">PHP memecached 0.1.0</title>
<references>
<reference href="https://pecl.php.net/package-changelog.php?package=memcached&amp;release">Change Log</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:php:memcached:0.1.0:*:*:*:*:*:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:php:memcached:0.1.2">
<title xml:lang="en-US">PHP memecached 0.1.2</title>
<references>
<reference href="https://pecl.php.net/package-changelog.php?package=memcached&amp;release">Change Log</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:php:memcached:0.1.2:*:*:*:*:*:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:php:memcached:0.1.3">
<title xml:lang="en-US">PHP memecached 0.1.3</title>
<references>
<reference href="https://pecl.php.net/package-changelog.php?package=memcached&amp;release">Change Log</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:php:memcached:0.1.3:*:*:*:*:*:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:php:imagick:3.3.0">
<title xml:lang="en-US">PHP Imagick 3.3.0</title>
<references>
<reference href="http://pecl.php.net/package/imagick">Version</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:php:imagick:3.3.0:*:*:*:*:*:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:php:imagick:3.4.0:-">
<title xml:lang="en-US">PHP Imagick 3.4.0</title>
<references>
<reference href="http://pecl.php.net/package/imagick">Version</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:php:imagick:3.4.0:-:*:*:*:*:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:php:xml_rpc:1.4.4::~~~pear~~">
<title xml:lang="en-US">PHP XML_RPC 1.4.4 for Pear</title>
<references>
<reference href="https://pear.php.net/package/XML_RPC/download/">Version</reference>
<reference href="https://pear.php.net/package/XML_RPC/">Product</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:php:xml_rpc:1.4.4:*:*:*:*:pear:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:php:xml_rpc:1.4.5::~~~pear~~">
<title xml:lang="en-US">PHP XML_RPC 1.4.5 for Pear</title>
<references>
<reference href="https://pear.php.net/package/XML_RPC/download/">Version</reference>
<reference href="https://pear.php.net/package/XML_RPC/">Product</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:php:xml_rpc:1.4.5:*:*:*:*:pear:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:php:xml_rpc:1.4.6::~~~pear~~">
<title xml:lang="en-US">PHP XML_RPC 1.4.6 for Pear</title>
<references>
<reference href="https://pear.php.net/package/XML_RPC/download/">Version</reference>
<reference href="https://pear.php.net/package/XML_RPC/">Product</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:php:xml_rpc:1.4.6:*:*:*:*:pear:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:php:pear:1.0:-">
<title xml:lang="en-US">PHP PEAR 1.0</title>
<references>
<reference href="https://pear.php.net/package/PEAR/download/">Change Log</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:php:pear:1.0:-:*:*:*:*:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:php:pear:1.0:b1">
<title xml:lang="en-US">PHP PEAR 1.0 Beta 1</title>
<references>
<reference href="https://pear.php.net/package/PEAR/download/">Change Log</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:php:pear:1.0:b1:*:*:*:*:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:html_quickform_project:html_quickform:2.0">
<title xml:lang="en-US">HTML_QuickForm project HTML_QuickForm 2.0</title>
<references>
<reference href="http://pear.php.net/package/HTML_QuickForm/">Project</reference>
<reference href="http://pear.php.net/package/HTML_QuickForm/download">Version</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:html_quickform_project:html_quickform:2.0:*:*:*:*:*:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:html_quickform_project:html_quickform:2.1">
<title xml:lang="en-US">HTML_QuickForm project HTML_QuickForm 2.1</title>
<references>
<reference href="http://pear.php.net/package/HTML_QuickForm/">Project</reference>
<reference href="http://pear.php.net/package/HTML_QuickForm/download">Version</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:html_quickform_project:html_quickform:2.1:*:*:*:*:*:*:*"/>
</cpe-item>
<cpe-item name="cpe:/a:jenkins:_subversion_partial_release_manager:1.0.1::~~~jenkins~~" deprecated="true" deprecation_date="2020-06-04T11:50:37.430Z">
<title xml:lang="en-US">Jenkins Subversion Partial Release Manager 1.0.1 for Jenkins</title>
<references>
<reference href="https://github.com/jenkinsci/svn-partial-release-mgr-plugin">Version</reference>
<reference href="https://plugins.jenkins.io/svn-partial-release-mgr">Product</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:jenkins:_subversion_partial_release_manager:1.0.1:*:*:*:*:jenkins:*:*">
<cpe-23:deprecation date="2020-06-04T07:50:37.430-04:00">
<cpe-23:deprecated-by name="cpe:2.3:a:jenkins:subversion_partial_release_manager:1.0.1:*:*:*:*:jenkins:*:*" type="NAME_CORRECTION"/>
</cpe-23:deprecation>
</cpe-23:cpe23-item>
</cpe-item>
<cpe-item name="cpe:/a:jenkins:360_fireline:1.0::~~~jenkins~~">
<title xml:lang="en-US">Jenkins 360 FireLine 1.0 for Jenkins</title>
<references>
<reference href="https://plugins.jenkins.io/fireline">Product</reference>
<reference href="https://github.com/jenkinsci/fireline-plugin">Version</reference>
</references>
<cpe-23:cpe23-item name="cpe:2.3:a:jenkins:360_fireline:1.0:*:*:*:*:jenkins:*:*"/>
</cpe-item>
</cpe-list>
@@ -4,8 +4,6 @@ const (
EcosystemNPM = "npm"
EcosystemRubyGems = "rubygems"
EcosystemPyPI = "pypi"
EcosystemPHPPear = "php_pear"
EcosystemPHPPecl = "php_pecl"
EcosystemJenkinsPlugins = "jenkins_plugins"
EcosystemRustCrates = "rust_crates"
)
@@ -86,9 +86,6 @@ func FromDictionaryFind(p pkg.Package) (cpe.CPE, bool) {
case pkg.RustPkg:
cpeString, ok = dict.EcosystemPackages[dictionary.EcosystemRustCrates][p.Name]
case pkg.PhpPeclPkg:
cpeString, ok = dict.EcosystemPackages[dictionary.EcosystemPHPPecl][p.Name]
default:
// The dictionary doesn't support this package type yet.
return cpe.CPE{}, false
+17 -3
View File
@@ -230,16 +230,30 @@ func cleanDescription(original *string) (cleaned string) {
// resolveProperty emulates some maven property resolution logic by looking in the project's variables
// as well as supporting the project expressions like ${project.parent.groupId}.
// If no match is found, the entire expression including ${} is returned
//
//nolint:gocognit
func resolveProperty(pom gopom.Project, property *string, propertyName string) string {
propertyCase := safeString(property)
log.WithFields("existingPropertyValue", propertyCase, "propertyName", propertyName).Trace("resolving property")
seenBeforePropertyNames := map[string]struct{}{
propertyName: {},
}
result := recursiveResolveProperty(pom, propertyCase, seenBeforePropertyNames)
if propertyMatcher.MatchString(result) {
return "" // dereferencing variable failed; fall back to empty string
}
return result
}
//nolint:gocognit
func recursiveResolveProperty(pom gopom.Project, propertyCase string, seenPropertyNames map[string]struct{}) string {
return propertyMatcher.ReplaceAllStringFunc(propertyCase, func(match string) string {
propertyName := strings.TrimSpace(match[2 : len(match)-1]) // remove leading ${ and trailing }
if _, seen := seenPropertyNames[propertyName]; seen {
return propertyCase
}
entries := pomProperties(pom)
if value, ok := entries[propertyName]; ok {
return value
seenPropertyNames[propertyName] = struct{}{}
return recursiveResolveProperty(pom, value, seenPropertyNames) // recursively resolve in case a variable points to a variable.
}
// if we don't find anything directly in the pom properties,
+85 -2
View File
@@ -502,7 +502,7 @@ func Test_resolveProperty(t *testing.T) {
pom: gopom.Project{
Parent: nil,
},
expected: "${project.parent.groupId}",
expected: "",
},
{
name: "nil string pointer halts search",
@@ -512,7 +512,90 @@ func Test_resolveProperty(t *testing.T) {
GroupID: nil,
},
},
expected: "${project.parent.groupId}",
expected: "",
},
{
name: "double dereference",
property: "${springboot.version}",
pom: gopom.Project{
Parent: &gopom.Parent{
Version: stringPointer("1.2.3"),
},
Properties: &gopom.Properties{
Entries: map[string]string{
"springboot.version": "${project.parent.version}",
},
},
},
expected: "1.2.3",
},
{
name: "map missing stops double dereference",
property: "${springboot.version}",
pom: gopom.Project{
Parent: &gopom.Parent{
Version: stringPointer("1.2.3"),
},
},
expected: "",
},
{
name: "resolution halts even if it resolves to a variable",
property: "${springboot.version}",
pom: gopom.Project{
Parent: &gopom.Parent{
Version: stringPointer("${undefined.version}"),
},
Properties: &gopom.Properties{
Entries: map[string]string{
"springboot.version": "${project.parent.version}",
},
},
},
expected: "",
},
{
name: "resolution halts even if cyclic",
property: "${springboot.version}",
pom: gopom.Project{
Properties: &gopom.Properties{
Entries: map[string]string{
"springboot.version": "${springboot.version}",
},
},
},
expected: "",
},
{
name: "resolution halts even if cyclic more steps",
property: "${cyclic.version}",
pom: gopom.Project{
Properties: &gopom.Properties{
Entries: map[string]string{
"other.version": "${cyclic.version}",
"springboot.version": "${other.version}",
"cyclic.version": "${springboot.version}",
},
},
},
expected: "",
},
{
name: "resolution halts even if cyclic involving parent",
property: "${cyclic.version}",
pom: gopom.Project{
Parent: &gopom.Parent{
Version: stringPointer("${cyclic.version}"),
},
Properties: &gopom.Properties{
Entries: map[string]string{
"other.version": "${parent.version}",
"springboot.version": "${other.version}",
"cyclic.version": "${springboot.version}",
},
},
},
expected: "",
},
}
-3
View File
@@ -146,9 +146,6 @@ func (s License) Merge(l License) (*License, error) {
if err != nil {
return nil, err
}
if err != nil {
return nil, err
}
if sHash != lHash {
return nil, fmt.Errorf("cannot merge licenses with different hash")
}
@@ -40,9 +40,6 @@ func (l stereoscopeImageSourceProvider) Provide(ctx context.Context) (source.Sou
Exclude: l.cfg.Exclude,
Alias: l.cfg.Alias,
}
if err != nil {
return nil, err
}
return New(img, cfg), nil
}