@@ -19,6 +19,7 @@ import (
1919 "strconv"
2020 "strings"
2121 "time"
22+ "unicode"
2223
2324 "github.com/checkmarx/ast-cli/internal/commands/asca"
2425 "github.com/checkmarx/ast-cli/internal/commands/scarealtime"
@@ -1551,9 +1552,9 @@ func runScaResolver(sourceDir, scaResolver, scaResolverParams, projectName strin
15511552 scaResolverResultsFile ,
15521553 }
15531554 if scaResolverParams != "" {
1554- args = append (args , scaResolverParams )
1555+ parsedscaResolverParams := parseArgs (scaResolverParams )
1556+ args = append (args , parsedscaResolverParams ... )
15551557 }
1556-
15571558 log .Println (fmt .Sprintf ("Using SCA resolver: %s %v" , scaResolver , args ))
15581559 out , err := exec .Command (scaResolver , args ... ).Output ()
15591560 logger .PrintIfVerbose (string (out ))
@@ -1727,6 +1728,7 @@ func getScaResolverFlags(cmd *cobra.Command) (scaResolverParams, scaResolver str
17271728 scaResolver = ""
17281729 scaResolverParams = ""
17291730 }
1731+ logger .PrintfIfVerbose ("Sca-Resolver params:: %v" , scaResolverParams )
17301732 return scaResolverParams , scaResolver
17311733}
17321734
@@ -2973,3 +2975,34 @@ func validateBooleanString(value string) error {
29732975 }
29742976 return nil
29752977}
2978+
2979+ func parseArgs (input string ) []string {
2980+ var args []string
2981+ var current strings.Builder
2982+ var quote rune
2983+ inQuotes := false
2984+
2985+ for i , r := range input {
2986+ switch {
2987+ case (r == '\'' || r == '"' ) && ! inQuotes :
2988+ inQuotes = true
2989+ quote = r
2990+ case r == quote && inQuotes :
2991+ inQuotes = false
2992+ case unicode .IsSpace (r ) && ! inQuotes :
2993+ if current .Len () > 0 {
2994+ args = append (args , current .String ())
2995+ current .Reset ()
2996+ }
2997+ default :
2998+ current .WriteRune (r )
2999+ }
3000+
3001+ // Append last token if input ends
3002+ if i == len (input )- 1 && current .Len () > 0 {
3003+ args = append (args , current .String ())
3004+ }
3005+ }
3006+
3007+ return args
3008+ }
0 commit comments