diff --git a/ql/src/semmle/go/Packages.qll b/ql/src/semmle/go/Packages.qll index 0b134110ae1..bc51911da27 100644 --- a/ql/src/semmle/go/Packages.qll +++ b/ql/src/semmle/go/Packages.qll @@ -32,9 +32,10 @@ class Package extends @package { * For example, `package("github.com/go-pg/pg", "types")` gets an import path that can * refer to `"github.com/go-pg/pg/types"`, but also to `"github.com/go-pg/pg/v10/types"`. */ -bindingset[result, mod, path] +bindingset[mod, path] string package(string mod, string path) { // "\Q" and "\E" start and end a quoted section of a regular expression. Anything like "." or "*" that // "*" that comes between them is not interpreted as it would normally be in a regular expression. - result.regexpMatch("\\Q" + mod + "\\E([/.]v[^/]+)?($|/)\\Q" + path + "\\E") + result.regexpMatch("\\Q" + mod + "\\E([/.]v[^/]+)?($|/)\\Q" + path + "\\E") and + result = any(Package p).getPath() } diff --git a/ql/test/library-tests/semmle/go/Packages/main.go b/ql/test/library-tests/semmle/go/Packages/main.go index 77f2609a533..cd3014221d4 100644 --- a/ql/test/library-tests/semmle/go/Packages/main.go +++ b/ql/test/library-tests/semmle/go/Packages/main.go @@ -4,6 +4,8 @@ import ( "fmt" "github.com/nonexistent-test-pkg" + "github.com/nonexistent/test" + test2 "github.com/nonexistent/v2/test" ) func main() { diff --git a/ql/test/library-tests/semmle/go/Packages/package.ql b/ql/test/library-tests/semmle/go/Packages/package.ql index ff083b52aa7..41ee771ecdf 100644 --- a/ql/test/library-tests/semmle/go/Packages/package.ql +++ b/ql/test/library-tests/semmle/go/Packages/package.ql @@ -3,16 +3,16 @@ import go from string path where ( - path = "PackageName/v2/test" or // OK - path = "PackageName/test" or // OK - path = "PackageName//v//test" or // NOT OK - path = "PackageName//v/test" or // NOT OK - path = "PackageName/v//test" or // NOT OK - path = "PackageName/v/asd/v2/test" or // NOT OK - path = "PackageName/v/test" or // NOT OK - path = "PackageName//v2//test" or // NOT OK - path = "PackageName//v2/test" or // NOT OK - path = "PackageName/v2//test" // NOT OK + path = "github.com/nonexistent/v2/test" or // OK + path = "github.com/nonexistent/test" or // OK + path = "github.com/nonexistent//v//test" or // NOT OK + path = "github.com/nonexistent//v/test" or // NOT OK + path = "github.com/nonexistent/v//test" or // NOT OK + path = "github.com/nonexistent/v/asd/v2/test" or // NOT OK + path = "github.com/nonexistent/v/test" or // NOT OK + path = "github.com/nonexistent//v2//test" or // NOT OK + path = "github.com/nonexistent//v2/test" or // NOT OK + path = "github.com/nonexistent/v2//test" // NOT OK ) and - path = package("PackageName", "test") + path = package("github.com/nonexistent", "test") select path diff --git a/ql/test/library-tests/semmle/go/Packages/vendor/github.com/nonexistent/test/stub.go b/ql/test/library-tests/semmle/go/Packages/vendor/github.com/nonexistent/test/stub.go new file mode 100644 index 00000000000..56e54040790 --- /dev/null +++ b/ql/test/library-tests/semmle/go/Packages/vendor/github.com/nonexistent/test/stub.go @@ -0,0 +1 @@ +package test diff --git a/ql/test/library-tests/semmle/go/Packages/vendor/github.com/nonexistent/v2/test/stub.go b/ql/test/library-tests/semmle/go/Packages/vendor/github.com/nonexistent/v2/test/stub.go new file mode 100644 index 00000000000..56e54040790 --- /dev/null +++ b/ql/test/library-tests/semmle/go/Packages/vendor/github.com/nonexistent/v2/test/stub.go @@ -0,0 +1 @@ +package test