diff --git a/ql/src/semmle/go/frameworks/Stdlib.qll b/ql/src/semmle/go/frameworks/Stdlib.qll index c3e716b8a30..10c76675b49 100644 --- a/ql/src/semmle/go/frameworks/Stdlib.qll +++ b/ql/src/semmle/go/frameworks/Stdlib.qll @@ -38,6 +38,7 @@ import semmle.go.frameworks.stdlib.Strings import semmle.go.frameworks.stdlib.Sync import semmle.go.frameworks.stdlib.SyncAtomic import semmle.go.frameworks.stdlib.Syscall +import semmle.go.frameworks.stdlib.Sort import semmle.go.frameworks.stdlib.TextScanner import semmle.go.frameworks.stdlib.TextTabwriter import semmle.go.frameworks.stdlib.TextTemplate diff --git a/ql/src/semmle/go/frameworks/stdlib/Sort.qll b/ql/src/semmle/go/frameworks/stdlib/Sort.qll new file mode 100644 index 00000000000..859a63238ac --- /dev/null +++ b/ql/src/semmle/go/frameworks/stdlib/Sort.qll @@ -0,0 +1,23 @@ +/** + * Provides classes modeling security-relevant aspects of the `sort` package. + */ + +import go + +/** Provides models of commonly used functions in the `sort` package. */ +module Sort { + private class FunctionModels extends TaintTracking::FunctionModel { + FunctionInput inp; + FunctionOutput outp; + + FunctionModels() { + // signature: func Reverse(data Interface) Interface + hasQualifiedName("sort", "Reverse") and + (inp.isParameter(0) and outp.isResult()) + } + + override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { + input = inp and output = outp + } + } +} diff --git a/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Sort.go b/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Sort.go new file mode 100644 index 00000000000..3cf3b09497b --- /dev/null +++ b/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Sort.go @@ -0,0 +1,19 @@ +// Code generated by https://github.com/gagliardetto/codebox. DO NOT EDIT. + +package main + +import "sort" + +func TaintStepTest_SortReverse_B0I0O0(sourceCQL interface{}) interface{} { + fromInterface656 := sourceCQL.(sort.Interface) + intoInterface414 := sort.Reverse(fromInterface656) + return intoInterface414 +} + +func RunAllTaints_Sort() { + { + source := newSource(0) + out := TaintStepTest_SortReverse_B0I0O0(source) + sink(0, out) + } +}