Skip to content

Commit 13ac7ff

Browse files
committed
applied allow-partial-results to JAS and fixed 2 bugs related to error capturing and handling (commented above them)
1 parent b1f61c6 commit 13ac7ff

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

commands/audit/audit.go

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -181,30 +181,30 @@ func RunAudit(auditParams *AuditParams) (cmdResults *results.SecurityCommandResu
181181
}
182182
jfrogAppsConfig, err := jas.CreateJFrogAppsConfig(cmdResults.GetTargetsPaths())
183183
if err != nil {
184-
return cmdResults.AddGeneralError(fmt.Errorf("failed to create JFrogAppsConfig: %s", err.Error()))
184+
return cmdResults.AddGeneralError(fmt.Errorf("failed to create JFrogAppsConfig: %s", err.Error()), false)
185185
}
186186
// Initialize the parallel runner
187187
auditParallelRunner := utils.CreateSecurityParallelRunner(auditParams.threads)
188188
// Add the JAS scans to the parallel runner
189189
var jasScanner *jas.JasScanner
190190
var generalJasScanErr error
191191
if jasScanner, generalJasScanErr = RunJasScans(auditParallelRunner, auditParams, cmdResults, jfrogAppsConfig); generalJasScanErr != nil {
192-
cmdResults.AddGeneralError(fmt.Errorf("An error has occurred during JAS scan process. JAS scan is skipped for the following directories: %s\n%s", strings.Join(cmdResults.GetTargetsPaths(), ","), generalJasScanErr.Error()))
192+
cmdResults.AddGeneralError(fmt.Errorf("An error has occurred during JAS scan process. JAS scan is skipped for the following directories: %s\n%s", strings.Join(cmdResults.GetTargetsPaths(), ","), generalJasScanErr.Error()), auditParams.AllowPartialResults())
193193
}
194194
if auditParams.Progress() != nil {
195195
auditParams.Progress().SetHeadlineMsg("Scanning for issues")
196196
}
197197
// The sca scan doesn't require the analyzer manager, so it can run separately from the analyzer manager download routine.
198198
if generalScaScanError := buildDepTreeAndRunScaScan(auditParallelRunner, auditParams, cmdResults); generalScaScanError != nil {
199-
cmdResults.AddGeneralError(fmt.Errorf("An error has occurred during SCA scan process. SCA scan is skipped for the following directories: %s\n%s", strings.Join(cmdResults.GetTargetsPaths(), ","), generalScaScanError.Error()))
199+
cmdResults.AddGeneralError(fmt.Errorf("An error has occurred during SCA scan process. SCA scan is skipped for the following directories: %s\n%s", strings.Join(cmdResults.GetTargetsPaths(), ","), generalScaScanError.Error()), auditParams.AllowPartialResults())
200200
}
201201
go func() {
202202
auditParallelRunner.ScaScansWg.Wait()
203203
auditParallelRunner.JasWg.Wait()
204204
// Wait for all jas scanners to complete before cleaning up scanners temp dir
205205
auditParallelRunner.JasScannersWg.Wait()
206206
if jasScanner != nil && jasScanner.ScannerDirCleanupFunc != nil {
207-
cmdResults.AddGeneralError(jasScanner.ScannerDirCleanupFunc())
207+
cmdResults.AddGeneralError(jasScanner.ScannerDirCleanupFunc(), false)
208208
}
209209
auditParallelRunner.Runner.Done()
210210
}()
@@ -242,7 +242,8 @@ func RunJasScans(auditParallelRunner *utils.SecurityParallelRunner, auditParams
242242
}
243243
auditParallelRunner.JasWg.Add(1)
244244
if _, jasErr := auditParallelRunner.Runner.AddTaskWithError(createJasScansTasks(auditParallelRunner, scanResults, serverDetails, auditParams, jasScanner, jfrogAppsConfig), func(taskErr error) {
245-
generalError = errors.Join(generalError, fmt.Errorf("failed while adding JAS scan tasks: %s", taskErr.Error()))
245+
// TODO this change was for capturing a missed error that is coming from the threads
246+
scanResults.AddGeneralError(fmt.Errorf("failed while adding JAS scan tasks: %s", taskErr.Error()), auditParams.AllowPartialResults())
246247
}); jasErr != nil {
247248
generalError = fmt.Errorf("failed to create JAS task: %s", jasErr.Error())
248249
}
@@ -281,9 +282,13 @@ func createJasScansTasks(auditParallelRunner *utils.SecurityParallelRunner, scan
281282
SignedDescriptions: auditParams.OutputFormat() == format.Sarif,
282283
ScanResults: targetResult,
283284
TargetOutputDir: auditParams.scanResultsOutputDir,
285+
AllowPartialResults: auditParams.AllowPartialResults(),
284286
}
285-
if generalError := runner.AddJasScannersTasks(params); generalError != nil {
287+
if generalError = runner.AddJasScannersTasks(params); generalError != nil {
288+
// TODO this fix was in order to avoid capturing the error twice when using partial-results. if this is disables the error is collected twice - once from the target error and once from general error
286289
_ = targetResult.AddTargetError(fmt.Errorf("%s failed to add JAS scan tasks: %s", logPrefix, generalError.Error()), auditParams.AllowPartialResults())
290+
// We assign nil to 'generalError' after handling it to prevent it to propagate further, so it will not be captured twice - once here, and once in the error handling function of createJasScansTasks
291+
generalError = nil
287292
}
288293
}
289294
return
@@ -295,20 +300,20 @@ func initAuditCmdResults(params *AuditParams) (cmdResults *results.SecurityComma
295300
// Initialize general information
296301
serverDetails, err := params.ServerDetails()
297302
if err != nil {
298-
return cmdResults.AddGeneralError(err)
303+
return cmdResults.AddGeneralError(err, false)
299304
}
300305
var xrayManager *xray.XrayServicesManager
301306
if xrayManager, params.xrayVersion, err = xrayutils.CreateXrayServiceManagerAndGetVersion(serverDetails); err != nil {
302-
return cmdResults.AddGeneralError(err)
307+
return cmdResults.AddGeneralError(err, false)
303308
} else {
304309
cmdResults.SetXrayVersion(params.xrayVersion)
305310
}
306311
if err = clientutils.ValidateMinimumVersion(clientutils.Xray, params.xrayVersion, scangraph.GraphScanMinXrayVersion); err != nil {
307-
return cmdResults.AddGeneralError(err)
312+
return cmdResults.AddGeneralError(err, false)
308313
}
309314
entitledForJas, err := isEntitledForJas(xrayManager, params)
310315
if err != nil {
311-
return cmdResults.AddGeneralError(err)
316+
return cmdResults.AddGeneralError(err, false)
312317
} else {
313318
cmdResults.SetEntitledForJas(entitledForJas)
314319
}

0 commit comments

Comments
 (0)