diff --git a/ql/src/semmle/go/frameworks/stdlib/EncodingAsn1.qll b/ql/src/semmle/go/frameworks/stdlib/EncodingAsn1.qll index 9ae98c3d1b2..f0ae25d9fbe 100644 --- a/ql/src/semmle/go/frameworks/stdlib/EncodingAsn1.qll +++ b/ql/src/semmle/go/frameworks/stdlib/EncodingAsn1.qll @@ -6,6 +6,34 @@ import go /** Provides models of commonly used functions in the `encoding/asn1` package. */ module EncodingAsn1 { + /** The `Marshal` or `MarshalWithParams` function in the `encoding/asn1` package. */ + private class MarshalFunction extends MarshalingFunction::Range { + MarshalFunction() { + hasQualifiedName("encoding/asn1", "Marshal") or + hasQualifiedName("encoding/asn1", "MarshalWithParams") + } + + override FunctionInput getAnInput() { result.isParameter(0) } + + override FunctionOutput getOutput() { result.isResult(0) } + + override string getFormat() { result = "ASN1" } + } + + /** The `Unmarshal` or `UnmarshalWithParams` function in the `encoding/asn1` package. */ + private class UnmarshalFunction extends UnmarshalingFunction::Range { + UnmarshalFunction() { + hasQualifiedName("encoding/asn1", "Unmarshal") or + hasQualifiedName("encoding/asn1", "UnmarshalWithParams") + } + + override FunctionInput getAnInput() { result.isParameter(0) } + + override FunctionOutput getOutput() { result.isParameter(1) } + + override string getFormat() { result = "ASN1" } + } + private class FunctionModels extends TaintTracking::FunctionModel { FunctionInput inp; FunctionOutput outp;