Skip to content

Commit 88b1c0a

Browse files
authored
Merge pull request #47 from cfstras/fix-exponential-regexps
fix: only add arn patterns to list if not already contained
2 parents f809343 + ca0ee51 commit 88b1c0a

1 file changed

Lines changed: 28 additions & 11 deletions

File tree

iamlivecore/logger.go

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -647,27 +647,44 @@ func getAccountFromAccessKey(accessKeyId string) (string, error) {
647647
return fmt.Sprintf("%012d", accountId), nil
648648
}
649649

650+
type uniqueStringList struct {
651+
list []string
652+
set map[string]bool
653+
}
654+
655+
func newUniqueStringList() *uniqueStringList {
656+
return &uniqueStringList{set: map[string]bool{}}
657+
}
658+
func (s *uniqueStringList) add(newArn string) {
659+
if _, ok := s.set[newArn]; !ok {
660+
s.list = append(s.list, newArn)
661+
s.set[newArn] = true
662+
}
663+
}
664+
665+
func (s *uniqueStringList) addParam(arns []string, paramVarName, param string) {
666+
for _, arn := range arns {
667+
newArn := regexp.MustCompile(`\$\{`+strings.ReplaceAll(strings.ReplaceAll(paramVarName, "[", "\\["), "]", "\\]")+`\}`).ReplaceAllString(arn, param)
668+
s.add(newArn)
669+
}
670+
}
671+
650672
func subARNParameters(arn string, call Entry, specialsOnly bool) (bool, []string) {
651673
arns := []string{arn}
652-
653674
// parameter substitution
654675
for paramVarName, params := range call.Parameters {
655-
newArns := []string{}
676+
newArns := newUniqueStringList()
656677
for _, param := range params {
657-
for _, arn := range arns {
658-
newArns = append(newArns, regexp.MustCompile(`\$\{`+strings.ReplaceAll(strings.ReplaceAll(paramVarName, "[", "\\["), "]", "\\]")+`\}`).ReplaceAllString(arn, param)) // might have dupes but resolved out later
659-
}
678+
newArns.addParam(arns, paramVarName, param)
660679
}
661-
arns = newArns
680+
arns = newArns.list
662681
}
663682

664683
// URI parameter substitution
665684
for paramVarName, param := range call.URIParameters {
666-
newArns := []string{}
667-
for _, arn := range arns {
668-
newArns = append(newArns, regexp.MustCompile(`\$\{`+strings.ReplaceAll(strings.ReplaceAll(paramVarName, "[", "\\["), "]", "\\]")+`\}`).ReplaceAllString(arn, param)) // might have dupes but resolved out later
669-
}
670-
arns = newArns
685+
newArns := newUniqueStringList()
686+
newArns.addParam(arns, paramVarName, param)
687+
arns = newArns.list
671688
}
672689

673690
if specialsOnly {

0 commit comments

Comments
 (0)