Skip to content
This repository was archived by the owner on Jan 5, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions ql/src/semmle/go/Concepts.qll
Original file line number Diff line number Diff line change
Expand Up @@ -653,10 +653,10 @@ class MarshalingFunction extends Function {
MarshalingFunction() { this = self }

/** Gets an input that is encoded by this function. */
DataFlow::FunctionInput getAnInput() { result = self.getAnInput() }
FunctionInput getAnInput() { result = self.getAnInput() }

/** Gets the output that contains the encoded data produced by this function. */
DataFlow::FunctionOutput getOutput() { result = self.getOutput() }
FunctionOutput getOutput() { result = self.getOutput() }

/** Gets an identifier for the format this function encodes into, such as "JSON". */
string getFormat() { result = self.getFormat() }
Expand All @@ -672,10 +672,10 @@ module MarshalingFunction {
*/
abstract class Range extends Function {
/** Gets an input that is encoded by this function. */
abstract DataFlow::FunctionInput getAnInput();
abstract FunctionInput getAnInput();

/** Gets the output that contains the encoded data produced by this function. */
abstract DataFlow::FunctionOutput getOutput();
abstract FunctionOutput getOutput();

/** Gets an identifier for the format this function encodes into, such as "JSON". */
abstract string getFormat();
Expand All @@ -694,10 +694,10 @@ class UnmarshalingFunction extends Function {
UnmarshalingFunction() { this = self }

/** Gets an input that is decoded by this function. */
DataFlow::FunctionInput getAnInput() { result = self.getAnInput() }
FunctionInput getAnInput() { result = self.getAnInput() }

/** Gets the output that contains the decoded data produced by this function. */
DataFlow::FunctionOutput getOutput() { result = self.getOutput() }
FunctionOutput getOutput() { result = self.getOutput() }

/** Gets an identifier for the format this function decodes from, such as "JSON". */
string getFormat() { result = self.getFormat() }
Expand All @@ -713,10 +713,10 @@ module UnmarshalingFunction {
*/
abstract class Range extends Function {
/** Gets an input that is decoded by this function. */
abstract DataFlow::FunctionInput getAnInput();
abstract FunctionInput getAnInput();

/** Gets the output that contains the decoded data produced by this function. */
abstract DataFlow::FunctionOutput getOutput();
abstract FunctionOutput getOutput();

/** Gets an identifier for the format this function decodes from, such as "JSON". */
abstract string getFormat();
Expand Down
62 changes: 31 additions & 31 deletions ql/src/semmle/go/frameworks/Stdlib.qll
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import go
class StringMethod extends TaintTracking::FunctionModel, Method {
StringMethod() { getName() = "String" and getNumParameter() = 0 }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isReceiver() and outp.isResult()
}
}
Expand All @@ -20,7 +20,7 @@ class StringMethod extends TaintTracking::FunctionModel, Method {
private class AppendFunction extends TaintTracking::FunctionModel {
AppendFunction() { this = Builtin::append() }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(_) and outp.isResult()
}
}
Expand All @@ -32,7 +32,7 @@ private class AppendFunction extends TaintTracking::FunctionModel {
private class CopyFunction extends TaintTracking::FunctionModel {
CopyFunction() { this = Builtin::copy() }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(1) and outp.isParameter(0)
}
}
Expand Down Expand Up @@ -60,7 +60,7 @@ module PathFilePath {
)
}

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(_) and
outp.isResult(_)
}
Expand All @@ -84,7 +84,7 @@ module Fmt {
class Sprinter extends TaintTracking::FunctionModel {
Sprinter() { this.hasQualifiedName("fmt", ["Sprint", "Sprintf", "Sprintln"]) }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(_) and outp.isResult()
}
}
Expand Down Expand Up @@ -440,7 +440,7 @@ module OS {
class Expand extends TaintTracking::FunctionModel {
Expand() { hasQualifiedName("os", "Expand") }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(0) and outp.isResult()
}
}
Expand All @@ -449,7 +449,7 @@ module OS {
class ExpandEnv extends TaintTracking::FunctionModel {
ExpandEnv() { hasQualifiedName("os", "ExpandEnv") }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(0) and outp.isResult()
}
}
Expand All @@ -470,7 +470,7 @@ module Path {
)
}

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(_) and
outp.isResult(_)
}
Expand All @@ -483,7 +483,7 @@ module Strings {
class Join extends TaintTracking::FunctionModel {
Join() { hasQualifiedName("strings", "Join") }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter([0 .. 1]) and outp.isResult()
}
}
Expand All @@ -492,7 +492,7 @@ module Strings {
class Repeat extends TaintTracking::FunctionModel {
Repeat() { hasQualifiedName("strings", "Repeat") }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(0) and outp.isResult()
}
}
Expand All @@ -503,7 +503,7 @@ module Strings {
hasQualifiedName("strings", "Replace") or hasQualifiedName("strings", "ReplaceAll")
}

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
(inp.isParameter(0) or inp.isParameter(2)) and
outp.isResult()
}
Expand All @@ -515,7 +515,7 @@ module Strings {
exists(string split | split.matches("Split%") | hasQualifiedName("strings", split))
}

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(0) and outp.isResult()
}
}
Expand All @@ -526,7 +526,7 @@ module Strings {
exists(string conv | conv.matches("To%") | hasQualifiedName("strings", conv))
}

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(getNumParameter() - 1) and outp.isResult()
}
}
Expand All @@ -535,7 +535,7 @@ module Strings {
class Trimmer extends TaintTracking::FunctionModel {
Trimmer() { exists(string split | split.matches("Trim%") | hasQualifiedName("strings", split)) }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(0) and outp.isResult()
}
}
Expand Down Expand Up @@ -591,7 +591,7 @@ module URL {
hasQualifiedName("net/url", "PathEscape") or hasQualifiedName("net/url", "QueryEscape")
}

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(0) and outp.isResult()
}
}
Expand All @@ -602,7 +602,7 @@ module URL {
hasQualifiedName("net/url", "PathUnescape") or hasQualifiedName("net/url", "QueryUnescape")
}

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(0) and outp.isResult(0)
}
}
Expand All @@ -616,7 +616,7 @@ module URL {
hasQualifiedName("net/url", "ParseRequestURI")
}

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(0) and
outp.isResult(0)
or
Expand All @@ -638,7 +638,7 @@ module URL {
)
}

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isReceiver() and outp.isResult()
}
}
Expand All @@ -647,7 +647,7 @@ module URL {
class UrlMarshalBinary extends TaintTracking::FunctionModel, Method {
UrlMarshalBinary() { hasQualifiedName("net/url", "URL", "MarshalBinary") }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isReceiver() and outp.isResult(0)
}
}
Expand All @@ -656,7 +656,7 @@ module URL {
class UrlResolveReference extends TaintTracking::FunctionModel, Method {
UrlResolveReference() { hasQualifiedName("net/url", "URL", "ResolveReference") }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
(inp.isReceiver() or inp.isParameter(0)) and
outp.isResult()
}
Expand All @@ -669,7 +669,7 @@ module URL {
hasQualifiedName("net/url", "UserPassword")
}

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(_) and outp.isResult()
}
}
Expand All @@ -683,7 +683,7 @@ module URL {
)
}

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isReceiver() and outp.isResult(0)
}
}
Expand All @@ -697,7 +697,7 @@ module URL {
)
}

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isReceiver() and outp.isResult()
}
}
Expand Down Expand Up @@ -797,27 +797,27 @@ module EncodingJson {
this.hasQualifiedName("encoding/json", "MarshalIndent")
}

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp = getAnInput() and outp = getOutput()
}

override DataFlow::FunctionInput getAnInput() { result.isParameter(0) }
override FunctionInput getAnInput() { result.isParameter(0) }

override DataFlow::FunctionOutput getOutput() { result.isResult(0) }
override FunctionOutput getOutput() { result.isResult(0) }

override string getFormat() { result = "JSON" }
}

private class UnmarshalFunction extends TaintTracking::FunctionModel, UnmarshalingFunction::Range {
UnmarshalFunction() { this.hasQualifiedName("encoding/json", "Unmarshal") }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp = getAnInput() and outp = getOutput()
}

override DataFlow::FunctionInput getAnInput() { result.isParameter(0) }
override FunctionInput getAnInput() { result.isParameter(0) }

override DataFlow::FunctionOutput getOutput() { result.isParameter(1) }
override FunctionOutput getOutput() { result.isParameter(1) }

override string getFormat() { result = "JSON" }
}
Expand All @@ -828,7 +828,7 @@ module EncodingHex {
private class DecodeStringFunction extends TaintTracking::FunctionModel {
DecodeStringFunction() { this.hasQualifiedName("encoding/hex", "DecodeString") }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(0) and
outp.isResult(0)
}
Expand All @@ -840,7 +840,7 @@ module CryptoCipher {
private class AeadOpenFunction extends TaintTracking::FunctionModel, Method {
AeadOpenFunction() { this.hasQualifiedName("crypto/cipher", "AEAD", "Open") }

override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) {
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
inp.isParameter(2) and
outp.isResult(0)
}
Expand Down