@@ -21,6 +21,7 @@ import (
21
21
22
22
var ScaResolverResultsFileNameDir = ScaResolverWorkingDir + "/cx-sca-realtime-results.json"
23
23
24
+ const scaResolverFailedStatus = "failedtoresolve"
24
25
const scaResolverProjectName = "cx-cli-sca-realtime-project"
25
26
const bitSize = 32
26
27
@@ -126,6 +127,7 @@ func GetSCAVulnerabilities(scaRealTimeWrapper wrappers.ScaRealTimeWrapper) error
126
127
}
127
128
128
129
var modelResults []wrappers.ScaVulnerabilitiesResponseModel
130
+ var scaRealtimeScanErrors []wrappers.ScaRealtimeScanError
129
131
130
132
for _ , dependencyResolutionResult := range scaResolverResults .DependencyResolutionResults {
131
133
// We're using a map to avoid adding repeated packages in request body
@@ -154,9 +156,11 @@ func GetSCAVulnerabilities(scaRealTimeWrapper wrappers.ScaRealTimeWrapper) error
154
156
for _ , value := range dependencyMap {
155
157
bodyRequest = append (bodyRequest , value )
156
158
}
157
- var errorModel , errVulnerabilities error
159
+
158
160
var vulnerabilitiesResponseModel []wrappers.ScaVulnerabilitiesResponseModel
159
161
for len (bodyRequest ) > 0 {
162
+ var errorModel , errVulnerabilities error
163
+
160
164
// Add pagination to avoid SCA limitation in requests length
161
165
if len (bodyRequest ) >= 50 { //nolint:gomnd
162
166
first50 := bodyRequest [:50 ]
@@ -181,10 +185,18 @@ func GetSCAVulnerabilities(scaRealTimeWrapper wrappers.ScaRealTimeWrapper) error
181
185
modelResults = append (modelResults , vulnerability )
182
186
}
183
187
}
188
+
189
+ // Check resolution status
190
+ if strings .EqualFold (dependencyResolutionResult .DependencyResolverStatus , scaResolverFailedStatus ) {
191
+ scaRealtimeScanErrors = append (scaRealtimeScanErrors , wrappers.ScaRealtimeScanError {
192
+ Filename : dependencyResolutionResult .PackageManagerFile ,
193
+ Message : dependencyResolutionResult .Message ,
194
+ })
195
+ }
184
196
}
185
197
186
198
// Convert SCA Results to Scan Results to make it easier to display it in IDEs
187
- err = convertToScanResults (modelResults )
199
+ err = convertToScanResults (modelResults , scaRealtimeScanErrors )
188
200
if err != nil {
189
201
return err
190
202
}
@@ -206,14 +218,14 @@ func GetScaVulnerabilitiesPackages(scaRealTimeWrapper wrappers.ScaRealTimeWrappe
206
218
}
207
219
208
220
// convertToScanResults Convert SCA Results to Scan Results to make it easier to display it in IDEs
209
- func convertToScanResults (data []wrappers.ScaVulnerabilitiesResponseModel ) error {
210
- var results []* wrappers.ScanResult
221
+ func convertToScanResults (data []wrappers.ScaVulnerabilitiesResponseModel , resolutionErrors []wrappers. ScaRealtimeScanError ) error {
222
+ var results []wrappers.ScanResult
211
223
212
224
for _ , packageData := range data {
213
225
for _ , vulnerability := range packageData .Vulnerabilities {
214
226
score , _ := strconv .ParseFloat (vulnerability .Cvss3 .BaseScore , bitSize )
215
227
216
- results = append (results , & wrappers.ScanResult {
228
+ results = append (results , wrappers.ScanResult {
217
229
Type : vulnerability .Type ,
218
230
ScaType : "vulnerability" ,
219
231
Label : commonParams .ScaType ,
@@ -249,8 +261,9 @@ func convertToScanResults(data []wrappers.ScaVulnerabilitiesResponseModel) error
249
261
}
250
262
}
251
263
252
- resultsCollection := wrappers.ScanResultsCollection {
264
+ resultsCollection := wrappers.ScaRealtimeScanResultsCollection {
253
265
Results : results ,
266
+ Errors : resolutionErrors ,
254
267
TotalCount : uint (len (results )),
255
268
}
256
269
0 commit comments