Skip to content

Commit ac076c5

Browse files
Merge pull request #1205 from Checkmarx/bug/AST-100708
Bug/sca-prarams-bug (AST-100708)
2 parents 0af147c + d232e7a commit ac076c5

File tree

4 files changed

+57
-5
lines changed

4 files changed

+57
-5
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ require (
140140
github.com/go-openapi/jsonreference v0.21.0 // indirect
141141
github.com/go-openapi/swag v0.23.1 // indirect
142142
github.com/go-restruct/restruct v1.2.0-alpha // indirect
143-
github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
143+
github.com/go-viper/mapstructure/v2 v2.3.0 // indirect
144144
github.com/gobwas/glob v0.2.3 // indirect
145145
github.com/gogo/protobuf v1.3.2 // indirect
146146
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,8 +421,8 @@ github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZ
421421
github.com/go-test/deep v1.0.4/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
422422
github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U=
423423
github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
424-
github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss=
425-
github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
424+
github.com/go-viper/mapstructure/v2 v2.3.0 h1:27XbWsHIqhbdR5TIC911OfYvgSaW93HM+dX7970Q7jk=
425+
github.com/go-viper/mapstructure/v2 v2.3.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
426426
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
427427
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
428428
github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=

internal/commands/scan.go

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

internal/commands/scan_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2237,3 +2237,22 @@ func TestCreateScanWith_ScaResolver_Source_as_Zip(t *testing.T) {
22372237
err := execCmdNotNilAssertion(t, baseArgs...)
22382238
assert.Assert(t, strings.Contains(err.Error(), ScaResolverZipNotSupportedErr), err.Error())
22392239
}
2240+
2241+
func Test_parseArgs(t *testing.T) {
2242+
tests := []struct {
2243+
inputString string
2244+
lenOfArgs int
2245+
}{
2246+
{"--log-level Debug --break-on-manifest-failure", 3},
2247+
{`test test1`, 2},
2248+
{"--gradle-parameters='-Prepository.proxy.url=123 -Prepository.proxy.username=123 -Prepository.proxy.password=123' --log-level Debug", 3},
2249+
}
2250+
2251+
for _, test := range tests {
2252+
fmt.Println("test ::", test)
2253+
result := parseArgs(test.inputString)
2254+
if len(result) != test.lenOfArgs {
2255+
t.Errorf(" test case failed for params %v", test)
2256+
}
2257+
}
2258+
}

0 commit comments

Comments
 (0)