From 0862de72ac6917bbc7512d38fc4b59feb122bab5 Mon Sep 17 00:00:00 2001 From: Alex Useche Date: Fri, 18 Aug 2023 11:54:46 -0700 Subject: [PATCH 1/4] updates to anon race condition --- go/anonymous-race-condition.go | 8 ++--- go/anonymous-race-condition.yaml | 62 ++++++++++++++++---------------- 2 files changed, 34 insertions(+), 36 deletions(-) diff --git a/go/anonymous-race-condition.go b/go/anonymous-race-condition.go index 700b2c0..ebd3935 100644 --- a/go/anonymous-race-condition.go +++ b/go/anonymous-race-condition.go @@ -44,7 +44,6 @@ func func2() { fmt.Println("I am function func2") } - func ConcurrentFunctions_TP(fns ...func()) { var wg sync.WaitGroup // ruleid: anonymous-race-condition @@ -104,7 +103,7 @@ func AnonRaceCond_1_FP() { func AnonRaceCond_2() { var wg sync.WaitGroup // ruleid: anonymous-race-condition - for i := 0; i< len(numbers); i++ { + for i := 0; i < len(numbers); i++ { wg.Add(1) go func() { fmt.Println(i) @@ -115,11 +114,10 @@ func AnonRaceCond_2() { wg.Wait() } - func AnonRaceCond_2_FP() { var wg sync.WaitGroup // ok: anonymous-race-condition - for i := 0; i< len(numbers); i++ { + for i := 0; i < len(numbers); i++ { wg.Add(1) go func(n int) { fmt.Println(n) @@ -133,7 +131,7 @@ func AnonRaceCond_2_FP() { func AnonRaceCond_3_FP() { var wg sync.WaitGroup // ok: anonymous-race-condition - for i := 0; i< len(numbers); i++ { + for i := 0; i < len(numbers); i++ { cpy := i wg.Add(1) go func() { diff --git a/go/anonymous-race-condition.yaml b/go/anonymous-race-condition.yaml index c4c194c..ed96b4e 100644 --- a/go/anonymous-race-condition.yaml +++ b/go/anonymous-race-condition.yaml @@ -28,6 +28,16 @@ rules: }(...) ... } + - pattern: | + for $Y, $X := range ... { + ... + go func(...){ + ... + $FOO(..., $Y, ...) + ... + }(...) + ... + } - pattern: | for $Y, $X := range ... { ... @@ -59,56 +69,46 @@ rules: ... } - pattern-not: | - for $X, $Y := range ... { + for ..., $X := range ... { ... - go func(..., $V, ...){ - ... - $FOO(..., $V, ...) - ... - }(..., $Y, ...) - ... - } - - pattern-not: | - for $Y, $X := range ... { + ..., $X := ..., $X ... - go func(..., $CP, ...){ + go func(...){ ... - $CP(...) + $FOO(..., $X, ...) ... - }($X) + }(...) ... } - pattern-not: | - for $X:=...;$Y;$Z { - ... - go func(..., $V, ...) { + for ..., $X := range ... { ... - $FOO(..., $V,...) + $X, ... := $X, ... + ... + go func(...){ + ... + $FOO(..., $X, ...) + ... + }(...) ... - }(..., $X, ...) - ... } - pattern-not: | - for $X, $Y := range ... { + for $Y, $X := range ... { ... - $COPY := $Y + $Y, $X := $Y, $X ... go func(...){ ... - $FOO(..., $COPY, ...) - ... + <... $X.$VAR ...> }(...) - ... } - pattern-not: | - for $X:=...;$Y;$Z { + for $Y, $X := range ... { ... - $COPY := $X + $Y, $X := $Y, $X ... - go func(...) { - ... - $FOO(..., $COPY,...) + go func(...){ ... + <... $Y.$VAR ...> }(...) - ... - } + } \ No newline at end of file From 10f9e6059546b03b3dd175068a8bee801fda1987 Mon Sep 17 00:00:00 2001 From: Alex Useche Date: Fri, 18 Aug 2023 12:05:53 -0700 Subject: [PATCH 2/4] clean up of anaon race condition --- go/anonymous-race-condition.go | 105 ++++++++++++++++++++++++++++++- go/anonymous-race-condition.yaml | 20 +----- 2 files changed, 105 insertions(+), 20 deletions(-) diff --git a/go/anonymous-race-condition.go b/go/anonymous-race-condition.go index c7f92f2..a6323b9 100644 --- a/go/anonymous-race-condition.go +++ b/go/anonymous-race-condition.go @@ -34,6 +34,14 @@ func main() { AnonRaceCond_3_FP() AnonRaceCond_4() AnonRaceCond_4_FP() + AnonRaceCond_5() + AnonRaceCond_6() + AnonRaceCond_7() + AnonRaceCond_7_FP() + AnonRaceCond_8() + AnonRaceCond_8_FP() + AnonRaceCond_9() + AnonRaceCond_9_FP() } func func1() { @@ -172,7 +180,6 @@ func AnonRaceCond_4_FP() { wg.Wait() } - func AnonRaceCond_5() { var wg sync.WaitGroup // ok: anonymous-race-condition @@ -204,3 +211,99 @@ func AnonRaceCond_6() { wg.Wait() } + +func AnonRaceCond_7() { + var wg sync.WaitGroup + // ruleid: anonymous-race-condition + for idx, val := range values { + wg.Add(1) + fmt.Println(val) + go func() { + fmt.Println("Completed index", idx) + wg.Done() + }() + } + + wg.Wait() +} + +func AnonRaceCond_7_FP() { + var wg sync.WaitGroup + // ok: anonymous-race-condition + for idx, val := range values { + wg.Add(1) + idx := idx + fmt.Println(val) + go func() { + fmt.Println("Completed index", idx) + wg.Done() + }() + } + + wg.Wait() +} + +func AnonRaceCond_8() { + var wg sync.WaitGroup + // ruleid: anonymous-race-condition + for _, num := range numbers { + for _, val := range values { + fmt.Println(num) + wg.Add(1) + go func() { + defer wg.Done() + fmt.Println(val) + }() + } + } + wg.Wait() +} + +func AnonRaceCond_8_FP() { + var wg sync.WaitGroup + // ok: anonymous-race-condition + for _, num := range numbers { + for _, val := range values { + num, val := num, val + fmt.Println(num) + wg.Add(1) + go func() { + defer wg.Done() + fmt.Println(val) + }() + } + } + wg.Wait() +} + +func AnonRaceCond_9() { + var wg sync.WaitGroup + // ruleid: anonymous-race-condition + for _, num := range numbers { + for _, val := range values { + fmt.Println(val) + wg.Add(1) + go func() { + defer wg.Done() + fmt.Println(num) + }() + } + } + wg.Wait() +} + +func AnonRaceCond_9_FP() { + var wg sync.WaitGroup + // ruleid: anonymous-race-condition + for _, num := range numbers { + for _, val := range values { + fmt.Println(num) + wg.Add(1) + go func() { + defer wg.Done() + fmt.Println(val) + }() + } + } + wg.Wait() +} diff --git a/go/anonymous-race-condition.yaml b/go/anonymous-race-condition.yaml index ec75f31..0249e6e 100644 --- a/go/anonymous-race-condition.yaml +++ b/go/anonymous-race-condition.yaml @@ -101,26 +101,7 @@ rules: ... <... $X.$VAR ...> }(...) - } - - pattern-not: | - for $Y, $X := range ... { - ... - $Y, $X := $Y, $X - ... - go func(...){ - ... - <... $Y.$VAR ...> - }(...) - } - - pattern-not: | - for $Y, $X := range ... { - ... - $Y, $X := $Y, $X ... - go func(...){ - ... - <... $X.$VAR ...> - }(...) } - pattern-not: | for $Y, $X := range ... { @@ -131,4 +112,5 @@ rules: ... <... $Y.$VAR ...> }(...) + ... } From 50f929fb0e0f8127536dc405efe3cf77867a53c1 Mon Sep 17 00:00:00 2001 From: Alex Useche Date: Fri, 18 Aug 2023 12:30:15 -0700 Subject: [PATCH 3/4] fix to unit tests --- go/anonymous-race-condition.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/anonymous-race-condition.go b/go/anonymous-race-condition.go index a6323b9..aeca06c 100644 --- a/go/anonymous-race-condition.go +++ b/go/anonymous-race-condition.go @@ -245,8 +245,8 @@ func AnonRaceCond_7_FP() { func AnonRaceCond_8() { var wg sync.WaitGroup - // ruleid: anonymous-race-condition for _, num := range numbers { + // ruleid: anonymous-race-condition for _, val := range values { fmt.Println(num) wg.Add(1) @@ -294,8 +294,8 @@ func AnonRaceCond_9() { func AnonRaceCond_9_FP() { var wg sync.WaitGroup - // ruleid: anonymous-race-condition for _, num := range numbers { + // ruleid: anonymous-race-condition for _, val := range values { fmt.Println(num) wg.Add(1) From 7db5d05c989a15781ab89a3e764dc13c103b77d7 Mon Sep 17 00:00:00 2001 From: Alex Useche Date: Mon, 21 Aug 2023 08:45:13 -0700 Subject: [PATCH 4/4] additional refactor to anonymous race cond rule --- go/anonymous-race-condition.yaml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/go/anonymous-race-condition.yaml b/go/anonymous-race-condition.yaml index 0249e6e..e644679 100644 --- a/go/anonymous-race-condition.yaml +++ b/go/anonymous-race-condition.yaml @@ -99,18 +99,6 @@ rules: ... go func(...){ ... - <... $X.$VAR ...> - }(...) - ... - } - - pattern-not: | - for $Y, $X := range ... { - ... - $Y, $X := $Y, $X - ... - go func(...){ - ... - <... $Y.$VAR ...> }(...) ... }