github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scanners/azure/functions/intersection.go (about) 1 package functions 2 3 import "sort" 4 5 func Intersection(args ...interface{}) interface{} { 6 7 if args == nil || len(args) < 2 { 8 return []interface{}{} 9 } 10 11 switch args[0].(type) { 12 case map[string]interface{}: 13 return intersectionMap(args...) 14 case interface{}: 15 return intersectionArray(args...) 16 } 17 18 return []interface{}{} 19 } 20 21 func intersectionArray(args ...interface{}) interface{} { 22 result := []interface{}{} 23 hash := make(map[interface{}]bool) 24 25 for _, arg := range args[0].([]interface{}) { 26 hash[arg] = true 27 } 28 29 for i := 1; i < len(args); i++ { 30 workingHash := make(map[interface{}]bool) 31 argArr, ok := args[i].([]interface{}) 32 if !ok { 33 continue 34 } 35 for _, item := range argArr { 36 if _, ok := hash[item]; ok { 37 workingHash[item] = true 38 } 39 } 40 hash = workingHash 41 } 42 43 for k := range hash { 44 result = append(result, k) 45 } 46 47 sort.Slice(result, func(i, j int) bool { 48 return result[i].(string) < result[j].(string) 49 }) 50 51 return result 52 } 53 54 func intersectionMap(args ...interface{}) interface{} { 55 hash := make(map[string]interface{}) 56 57 for k, v := range args[0].(map[string]interface{}) { 58 hash[k] = v 59 } 60 61 for i := 1; i < len(args); i++ { 62 workingHash := make(map[string]interface{}) 63 argArr, ok := args[i].(map[string]interface{}) 64 if !ok { 65 continue 66 } 67 for k, v := range argArr { 68 if ev, ok := hash[k]; ok && ev == v { 69 workingHash[k] = v 70 } 71 } 72 hash = workingHash 73 } 74 75 return hash 76 }