Skip to content
This repository was archived by the owner on Jan 5, 2023. It is now read-only.

Commit 2df8c27

Browse files
author
Max Schaefer
committed
Fix field lookup in cyclic structs.
1 parent 7c2358c commit 2df8c27

File tree

9 files changed

+14
-0
lines changed

9 files changed

+14
-0
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
lgtm,codescanning
2+
* A bug has been fixed that could cause the analysis not to terminate in the presence of cycles through embedded struct fields.

ql/src/semmle/go/Types.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,7 @@ class StructType extends @structtype, CompositeType {
389389
) {
390390
hasOwnField(_, name, tp, isEmbedded) and depth = 0 and isMethod = false
391391
or
392+
not hasOwnField(_, name, _, _) and
392393
exists(Type embedded | hasEmbeddedField(embedded, depth - 1) |
393394
embedded.getUnderlyingType().(StructType).hasOwnField(_, name, tp, isEmbedded) and
394395
isMethod = false

ql/test/library-tests/semmle/go/Types/Field_getPackage.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
| cyclic.go:4:3:4:3 | s | package github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types |
12
| pkg1/embedding.go:19:23:19:26 | base | package github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 |
23
| pkg1/embedding.go:22:27:22:30 | base | package github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 |
34
| pkg1/embedding.go:25:24:25:31 | embedder | package github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 |

ql/test/library-tests/semmle/go/Types/Field_hasQualifiedName2.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
| cyclic.go:4:3:4:3 | s | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types.s | s |
12
| pkg1/embedding.go:19:23:19:26 | base | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.embedder | base |
23
| pkg1/embedding.go:19:23:19:26 | base | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.embedder2 | base |
34
| pkg1/embedding.go:19:23:19:26 | base | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.embedder3 | base |

ql/test/library-tests/semmle/go/Types/Field_hasQualifiedName3.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
| cyclic.go:4:3:4:3 | s | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types | s | s |
12
| pkg1/embedding.go:19:23:19:26 | base | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 | embedder | base |
23
| pkg1/embedding.go:19:23:19:26 | base | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 | embedder2 | base |
34
| pkg1/embedding.go:19:23:19:26 | base | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1 | embedder3 | base |

ql/test/library-tests/semmle/go/Types/QualifiedNames.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@
1919
| embedder3 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.embedder3 |
2020
| embedder4 | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.embedder4 |
2121
| ptrembedder | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types/pkg1.ptrembedder |
22+
| s | github.com/github/codeql-go/ql/test/library-tests/semmle/go/Types.s |

ql/test/library-tests/semmle/go/Types/StructFields.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,4 @@
3131
| embedder4 | pkg1/embedding.go:35:16:38:1 | struct type | base | base |
3232
| embedder4 | pkg1/embedding.go:35:16:38:1 | struct type | f | int |
3333
| ptrembedder | pkg1/embedding.go:22:18:22:32 | struct type | base | * base |
34+
| s | cyclic.go:3:8:5:1 | struct type | s | * s |

ql/test/library-tests/semmle/go/Types/Types.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@
1919
| embedder3 | embedder3 |
2020
| embedder4 | embedder4 |
2121
| ptrembedder | ptrembedder |
22+
| s | s |
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package main
2+
3+
type s struct {
4+
*s
5+
}

0 commit comments

Comments
 (0)