1- import { AuthFailedError } from '../errors' ;
2- import { Options , PolicyOptions } from '../types' ;
31import { spinner } from '../../lib/spinner' ;
2+ import { sleep } from '../common' ;
3+ import { AuthFailedError } from '../errors' ;
4+ import { findAndLoadPolicy } from '../policy' ;
5+ import {
6+ createDepGraph ,
7+ getDepGraph ,
8+ getIssues ,
9+ pollingTestWithTokenUntilDone ,
10+ requestTestPollingToken ,
11+ } from '../polling/polling-test' ;
12+ import { SEVERITY } from '../snyk-test/common' ;
13+ import { Issue , IssueDataUnmanaged } from '../snyk-test/legacy' ;
14+ import { Options , PolicyOptions , SupportedProjectTypes } from '../types' ;
15+ import { extractAndApplyPluginAnalytics } from './plugin-analytics' ;
16+ import { filterIgnoredIssues } from './policy' ;
417import {
518 Ecosystem ,
19+ FileSignaturesDetails ,
620 ScanResult ,
721 TestResult ,
8- FileSignaturesDetails ,
922} from './types' ;
1023import {
24+ Attributes ,
1125 CreateDepGraphResponse ,
12- GetIssuesResponse ,
1326 FileHashes ,
14- Attributes ,
27+ GetIssuesResponse ,
1528} from './unmanaged/types' ;
16- import {
17- requestTestPollingToken ,
18- pollingTestWithTokenUntilDone ,
19- createDepGraph ,
20- getDepGraph ,
21- getIssues ,
22- } from '../polling/polling-test' ;
23- import { extractAndApplyPluginAnalytics } from './plugin-analytics' ;
24- import { findAndLoadPolicy } from '../policy' ;
25- import { filterIgnoredIssues } from './policy' ;
26- import { IssueDataUnmanaged , Issue } from '../snyk-test/legacy' ;
2729import {
2830 convertDepGraph ,
2931 convertMapCasing ,
3032 convertToCamelCase ,
3133 getOrg ,
3234} from './unmanaged/utils' ;
33- import { sleep } from '../common' ;
34- import { SEVERITY } from '../snyk-test/common' ;
3535
3636export async function resolveAndTestFacts (
3737 ecosystem : Ecosystem ,
@@ -152,6 +152,21 @@ async function fetchIssues(
152152 } ;
153153}
154154
155+ function buildVulnerabilityFromIssue (
156+ issueData : IssueDataUnmanaged ,
157+ issue : Issue ,
158+ packageManager : SupportedProjectTypes ,
159+ ) : IssueDataUnmanaged {
160+ const pkgCoordinate = `${ issue . pkgName } @${ issue . pkgVersion } ` ;
161+ issueData . from = [ pkgCoordinate ] ;
162+ issueData . name = pkgCoordinate ;
163+ issueData . packageManager = packageManager ;
164+ issueData . version = issue . pkgVersion || '' ;
165+ issueData . upgradePath = [ false ] ;
166+ issueData . isPatchable = false ;
167+ return issueData ;
168+ }
169+
155170export async function resolveAndTestFactsUnmanagedDeps (
156171 scans : {
157172 [ dir : string ] : ScanResult [ ] ;
@@ -203,25 +218,11 @@ export async function resolveAndTestFactsUnmanagedDeps(
203218 orgId ,
204219 ) ;
205220
206- const issuesMap : Map < string , Issue > = new Map ( ) ;
221+ const issuesMap = new Map < string , Issue > ( ) ;
207222 issues . forEach ( ( i ) => {
208- issuesMap [ i . issueId ] = i ;
223+ issuesMap . set ( i . issueId , i ) ;
209224 } ) ;
210225
211- const vulnerabilities : IssueDataUnmanaged [ ] = [ ] ;
212- for ( const issuesDataKey in issuesData ) {
213- const pkgCoordinate = `${ issuesMap [ issuesDataKey ] ?. pkgName } @${ issuesMap [ issuesDataKey ] ?. pkgVersion } ` ;
214- const issueData = issuesData [ issuesDataKey ] ;
215-
216- issueData . from = [ pkgCoordinate ] ;
217- issueData . name = pkgCoordinate ;
218- issueData . packageManager = packageManager ;
219- issueData . version = issuesMap [ issuesDataKey ] ?. pkgVersion ;
220- issueData . upgradePath = [ false ] ;
221- issueData . isPatchable = false ;
222- vulnerabilities . push ( issueData ) ;
223- }
224-
225226 const policy = await findAndLoadPolicy ( path , 'cpp' , options ) ;
226227
227228 const [ issuesFiltered , issuesDataFiltered ] = filterIgnoredIssues (
@@ -230,6 +231,37 @@ export async function resolveAndTestFactsUnmanagedDeps(
230231 policy ,
231232 ) ;
232233
234+ // Build vulnerabilities array from filtered data.
235+ const vulnerabilities : IssueDataUnmanaged [ ] = [ ] ;
236+ for ( const issuesDataKey in issuesDataFiltered ) {
237+ const issue = issuesMap . get ( issuesDataKey ) ;
238+ if ( issue ) {
239+ const issueData = issuesDataFiltered [
240+ issuesDataKey
241+ ] as IssueDataUnmanaged ;
242+ vulnerabilities . push (
243+ buildVulnerabilityFromIssue ( issueData , issue , packageManager ) ,
244+ ) ;
245+ }
246+ }
247+
248+ // Build filtered.ignore array with ignored vulnerabilities
249+ const filteredIgnore : IssueDataUnmanaged [ ] = [ ] ;
250+ for ( const issuesDataKey in issuesData ) {
251+ // If the issue was in the original data but not in the filtered data, it was ignored
252+ if ( ! ( issuesDataKey in issuesDataFiltered ) ) {
253+ const issue = issuesMap . get ( issuesDataKey ) ;
254+ if ( issue ) {
255+ const issueData = {
256+ ...issuesData [ issuesDataKey ] ,
257+ } as IssueDataUnmanaged ;
258+ filteredIgnore . push (
259+ buildVulnerabilityFromIssue ( issueData , issue , packageManager ) ,
260+ ) ;
261+ }
262+ }
263+ }
264+
233265 extractAndApplyPluginAnalytics ( [
234266 {
235267 name : 'packageManager' ,
@@ -256,6 +288,9 @@ export async function resolveAndTestFactsUnmanagedDeps(
256288 dependencyCount,
257289 packageManager,
258290 displayTargetFile,
291+ filtered : {
292+ ignore : filteredIgnore ,
293+ } ,
259294 } ) ;
260295 } catch ( error ) {
261296 const hasStatusCodeError = error . code >= 400 && error . code <= 500 ;
@@ -312,20 +347,21 @@ export async function resolveAndTestFactsRegistry(
312347 policy ,
313348 ) ;
314349
315- const issuesMap : Map < string , Issue > = new Map ( ) ;
350+ const issuesMap = new Map < string , Issue > ( ) ;
316351 response . issues . forEach ( ( i ) => {
317- issuesMap [ i . issueId ] = i ;
352+ issuesMap . set ( i . issueId , i ) ;
318353 } ) ;
319354
320355 const vulnerabilities : IssueDataUnmanaged [ ] = [ ] ;
321356 for ( const issuesDataKey in response . issuesData ) {
322- if ( issuesMap [ issuesDataKey ] ) {
357+ const issue = issuesMap . get ( issuesDataKey ) ;
358+ if ( issue ) {
323359 const issueData = response . issuesData [ issuesDataKey ] ;
324- const pkgCoordinate = `${ issuesMap [ issuesDataKey ] . pkgName } @${ issuesMap [ issuesDataKey ] . pkgVersion } ` ;
360+ const pkgCoordinate = `${ issue . pkgName } @${ issue . pkgVersion } ` ;
325361 issueData . from = [ pkgCoordinate ] ;
326362 issueData . name = pkgCoordinate ;
327363 issueData . packageManager = packageManager ;
328- issueData . version = issuesMap [ issuesDataKey ] ? .pkgVersion ;
364+ issueData . version = issue . pkgVersion || '' ;
329365 issueData . upgradePath = [ false ] ;
330366 issueData . isPatchable = false ;
331367 vulnerabilities . push ( issueData ) ;
0 commit comments