Add taint-tracking for reflect package

This commit is contained in:
Slavomir
2020-09-01 13:25:54 +02:00
parent aac303c0a2
commit e7f2fb27eb
3 changed files with 856 additions and 0 deletions

View File

@@ -14,6 +14,7 @@ import semmle.go.frameworks.stdlib.CompressLzw
import semmle.go.frameworks.stdlib.CompressZlib
import semmle.go.frameworks.stdlib.Path
import semmle.go.frameworks.stdlib.PathFilepath
import semmle.go.frameworks.stdlib.Reflect
/** A `String()` method. */
class StringMethod extends TaintTracking::FunctionModel, Method {

View File

@@ -0,0 +1,234 @@
/**
* Provides classes modeling security-relevant aspects of the `reflect` package.
*/
import go
/** Provides models of commonly used functions in the `reflect` package. */
module Reflect {
private class FunctionModels extends TaintTracking::FunctionModel {
FunctionInput inp;
FunctionOutput outp;
FunctionModels() {
// signature: func Append(s Value, x ...Value) Value
hasQualifiedName("reflect", "Append") and
(
inp.isParameter(_) and outp.isResult()
or
inp.isParameter(any(int i | i >= 1)) and outp.isParameter(0)
)
or
// signature: func AppendSlice(s Value, t Value) Value
hasQualifiedName("reflect", "AppendSlice") and
(
inp.isParameter(_) and outp.isResult()
or
inp.isParameter(1) and outp.isParameter(0)
)
or
// signature: func Copy(dst Value, src Value) int
hasQualifiedName("reflect", "Copy") and
(inp.isParameter(1) and outp.isParameter(0))
or
// signature: func Indirect(v Value) Value
hasQualifiedName("reflect", "Indirect") and
(inp.isParameter(0) and outp.isResult())
or
// signature: func ValueOf(i interface{}) Value
hasQualifiedName("reflect", "ValueOf") and
(inp.isParameter(0) and outp.isResult())
}
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
input = inp and output = outp
}
}
private class MethodModels extends TaintTracking::FunctionModel, Method {
FunctionInput inp;
FunctionOutput outp;
MethodModels() {
// signature: func (*MapIter).Key() Value
this.hasQualifiedName("reflect", "MapIter", "Key") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (*MapIter).Value() Value
this.hasQualifiedName("reflect", "MapIter", "Value") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (StructTag).Get(key string) string
this.hasQualifiedName("reflect", "StructTag", "Get") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (StructTag).Lookup(key string) (value string, ok bool)
this.hasQualifiedName("reflect", "StructTag", "Lookup") and
(inp.isReceiver() and outp.isResult(0))
or
// signature: func (Value).Addr() Value
this.hasQualifiedName("reflect", "Value", "Addr") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Bool() bool
this.hasQualifiedName("reflect", "Value", "Bool") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Bytes() []byte
this.hasQualifiedName("reflect", "Value", "Bytes") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Complex() complex128
this.hasQualifiedName("reflect", "Value", "Complex") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Convert(t Type) Value
this.hasQualifiedName("reflect", "Value", "Convert") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Elem() Value
this.hasQualifiedName("reflect", "Value", "Elem") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Field(i int) Value
this.hasQualifiedName("reflect", "Value", "Field") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).FieldByIndex(index []int) Value
this.hasQualifiedName("reflect", "Value", "FieldByIndex") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).FieldByName(name string) Value
this.hasQualifiedName("reflect", "Value", "FieldByName") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).FieldByNameFunc(match func(string) bool) Value
this.hasQualifiedName("reflect", "Value", "FieldByNameFunc") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Float() float64
this.hasQualifiedName("reflect", "Value", "Float") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Index(i int) Value
this.hasQualifiedName("reflect", "Value", "Index") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Int() int64
this.hasQualifiedName("reflect", "Value", "Int") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Interface() (i interface{})
this.hasQualifiedName("reflect", "Value", "Interface") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).InterfaceData() [2]uintptr
this.hasQualifiedName("reflect", "Value", "InterfaceData") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).MapIndex(key Value) Value
this.hasQualifiedName("reflect", "Value", "MapIndex") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).MapKeys() []Value
this.hasQualifiedName("reflect", "Value", "MapKeys") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).MapRange() *MapIter
this.hasQualifiedName("reflect", "Value", "MapRange") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Method(i int) Value
this.hasQualifiedName("reflect", "Value", "Method") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).MethodByName(name string) Value
this.hasQualifiedName("reflect", "Value", "MethodByName") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Pointer() uintptr
this.hasQualifiedName("reflect", "Value", "Pointer") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Recv() (x Value, ok bool)
this.hasQualifiedName("reflect", "Value", "Recv") and
(inp.isReceiver() and outp.isResult(0))
or
// signature: func (Value).Send(x Value)
this.hasQualifiedName("reflect", "Value", "Send") and
(inp.isParameter(0) and outp.isReceiver())
or
// signature: func (Value).Set(x Value)
this.hasQualifiedName("reflect", "Value", "Set") and
(inp.isParameter(0) and outp.isReceiver())
or
// signature: func (Value).SetBool(x bool)
this.hasQualifiedName("reflect", "Value", "SetBool") and
(inp.isParameter(0) and outp.isReceiver())
or
// signature: func (Value).SetBytes(x []byte)
this.hasQualifiedName("reflect", "Value", "SetBytes") and
(inp.isParameter(0) and outp.isReceiver())
or
// signature: func (Value).SetComplex(x complex128)
this.hasQualifiedName("reflect", "Value", "SetComplex") and
(inp.isParameter(0) and outp.isReceiver())
or
// signature: func (Value).SetFloat(x float64)
this.hasQualifiedName("reflect", "Value", "SetFloat") and
(inp.isParameter(0) and outp.isReceiver())
or
// signature: func (Value).SetInt(x int64)
this.hasQualifiedName("reflect", "Value", "SetInt") and
(inp.isParameter(0) and outp.isReceiver())
or
// signature: func (Value).SetMapIndex(key Value, elem Value)
this.hasQualifiedName("reflect", "Value", "SetMapIndex") and
(inp.isParameter(_) and outp.isReceiver())
or
// signature: func (Value).SetPointer(x unsafe.Pointer)
this.hasQualifiedName("reflect", "Value", "SetPointer") and
(inp.isParameter(0) and outp.isReceiver())
or
// signature: func (Value).SetString(x string)
this.hasQualifiedName("reflect", "Value", "SetString") and
(inp.isParameter(0) and outp.isReceiver())
or
// signature: func (Value).SetUint(x uint64)
this.hasQualifiedName("reflect", "Value", "SetUint") and
(inp.isParameter(0) and outp.isReceiver())
or
// signature: func (Value).Slice(i int, j int) Value
this.hasQualifiedName("reflect", "Value", "Slice") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).Slice3(i int, j int, k int) Value
this.hasQualifiedName("reflect", "Value", "Slice3") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).String() string
this.hasQualifiedName("reflect", "Value", "String") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).TryRecv() (x Value, ok bool)
this.hasQualifiedName("reflect", "Value", "TryRecv") and
(inp.isReceiver() and outp.isResult(0))
or
// signature: func (Value).TrySend(x Value) bool
this.hasQualifiedName("reflect", "Value", "TrySend") and
(inp.isParameter(0) and outp.isReceiver())
or
// signature: func (Value).Uint() uint64
this.hasQualifiedName("reflect", "Value", "Uint") and
(inp.isReceiver() and outp.isResult())
or
// signature: func (Value).UnsafeAddr() uintptr
this.hasQualifiedName("reflect", "Value", "UnsafeAddr") and
(inp.isReceiver() and outp.isResult())
}
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
input = inp and output = outp
}
}
}

View File

@@ -0,0 +1,621 @@
// Code generated by https://github.com/gagliardetto/codebox. DO NOT EDIT.
package main
import (
"reflect"
"unsafe"
)
func TaintStepTest_ReflectAppend_B0I0O0(sourceCQL interface{}) interface{} {
fromValue656 := sourceCQL.(reflect.Value)
intoValue414 := reflect.Append(fromValue656, reflect.Value{})
return intoValue414
}
func TaintStepTest_ReflectAppend_B0I1O0(sourceCQL interface{}) interface{} {
fromValue518 := sourceCQL.(reflect.Value)
intoValue650 := reflect.Append(reflect.Value{}, fromValue518)
return intoValue650
}
func TaintStepTest_ReflectAppend_B1I0O0(sourceCQL interface{}) interface{} {
fromValue784 := sourceCQL.(reflect.Value)
var intoValue957 reflect.Value
reflect.Append(intoValue957, fromValue784)
return intoValue957
}
func TaintStepTest_ReflectAppendSlice_B0I0O0(sourceCQL interface{}) interface{} {
fromValue520 := sourceCQL.(reflect.Value)
intoValue443 := reflect.AppendSlice(fromValue520, reflect.Value{})
return intoValue443
}
func TaintStepTest_ReflectAppendSlice_B0I1O0(sourceCQL interface{}) interface{} {
fromValue127 := sourceCQL.(reflect.Value)
intoValue483 := reflect.AppendSlice(reflect.Value{}, fromValue127)
return intoValue483
}
func TaintStepTest_ReflectAppendSlice_B1I0O0(sourceCQL interface{}) interface{} {
fromValue989 := sourceCQL.(reflect.Value)
var intoValue982 reflect.Value
reflect.AppendSlice(intoValue982, fromValue989)
return intoValue982
}
func TaintStepTest_ReflectCopy_B0I0O0(sourceCQL interface{}) interface{} {
fromValue417 := sourceCQL.(reflect.Value)
var intoValue584 reflect.Value
reflect.Copy(intoValue584, fromValue417)
return intoValue584
}
func TaintStepTest_ReflectIndirect_B0I0O0(sourceCQL interface{}) interface{} {
fromValue991 := sourceCQL.(reflect.Value)
intoValue881 := reflect.Indirect(fromValue991)
return intoValue881
}
func TaintStepTest_ReflectValueOf_B0I0O0(sourceCQL interface{}) interface{} {
fromInterface186 := sourceCQL.(interface{})
intoValue284 := reflect.ValueOf(fromInterface186)
return intoValue284
}
func TaintStepTest_ReflectMapIterKey_B0I0O0(sourceCQL interface{}) interface{} {
fromMapIter908 := sourceCQL.(reflect.MapIter)
intoValue137 := fromMapIter908.Key()
return intoValue137
}
func TaintStepTest_ReflectMapIterValue_B0I0O0(sourceCQL interface{}) interface{} {
fromMapIter494 := sourceCQL.(reflect.MapIter)
intoValue873 := fromMapIter494.Value()
return intoValue873
}
func TaintStepTest_ReflectStructTagGet_B0I0O0(sourceCQL interface{}) interface{} {
fromStructTag599 := sourceCQL.(reflect.StructTag)
intoString409 := fromStructTag599.Get("")
return intoString409
}
func TaintStepTest_ReflectStructTagLookup_B0I0O0(sourceCQL interface{}) interface{} {
fromStructTag246 := sourceCQL.(reflect.StructTag)
intoString898, _ := fromStructTag246.Lookup("")
return intoString898
}
func TaintStepTest_ReflectValueAddr_B0I0O0(sourceCQL interface{}) interface{} {
fromValue598 := sourceCQL.(reflect.Value)
intoValue631 := fromValue598.Addr()
return intoValue631
}
func TaintStepTest_ReflectValueBool_B0I0O0(sourceCQL interface{}) interface{} {
fromValue165 := sourceCQL.(reflect.Value)
intoBool150 := fromValue165.Bool()
return intoBool150
}
func TaintStepTest_ReflectValueBytes_B0I0O0(sourceCQL interface{}) interface{} {
fromValue340 := sourceCQL.(reflect.Value)
intoByte471 := fromValue340.Bytes()
return intoByte471
}
func TaintStepTest_ReflectValueComplex_B0I0O0(sourceCQL interface{}) interface{} {
fromValue290 := sourceCQL.(reflect.Value)
intoComplex128758 := fromValue290.Complex()
return intoComplex128758
}
func TaintStepTest_ReflectValueConvert_B0I0O0(sourceCQL interface{}) interface{} {
fromValue396 := sourceCQL.(reflect.Value)
intoValue707 := fromValue396.Convert(nil)
return intoValue707
}
func TaintStepTest_ReflectValueElem_B0I0O0(sourceCQL interface{}) interface{} {
fromValue912 := sourceCQL.(reflect.Value)
intoValue718 := fromValue912.Elem()
return intoValue718
}
func TaintStepTest_ReflectValueField_B0I0O0(sourceCQL interface{}) interface{} {
fromValue972 := sourceCQL.(reflect.Value)
intoValue633 := fromValue972.Field(0)
return intoValue633
}
func TaintStepTest_ReflectValueFieldByIndex_B0I0O0(sourceCQL interface{}) interface{} {
fromValue316 := sourceCQL.(reflect.Value)
intoValue145 := fromValue316.FieldByIndex(nil)
return intoValue145
}
func TaintStepTest_ReflectValueFieldByName_B0I0O0(sourceCQL interface{}) interface{} {
fromValue817 := sourceCQL.(reflect.Value)
intoValue474 := fromValue817.FieldByName("")
return intoValue474
}
func TaintStepTest_ReflectValueFieldByNameFunc_B0I0O0(sourceCQL interface{}) interface{} {
fromValue832 := sourceCQL.(reflect.Value)
intoValue378 := fromValue832.FieldByNameFunc(nil)
return intoValue378
}
func TaintStepTest_ReflectValueFloat_B0I0O0(sourceCQL interface{}) interface{} {
fromValue541 := sourceCQL.(reflect.Value)
intoFloat64139 := fromValue541.Float()
return intoFloat64139
}
func TaintStepTest_ReflectValueIndex_B0I0O0(sourceCQL interface{}) interface{} {
fromValue814 := sourceCQL.(reflect.Value)
intoValue768 := fromValue814.Index(0)
return intoValue768
}
func TaintStepTest_ReflectValueInt_B0I0O0(sourceCQL interface{}) interface{} {
fromValue468 := sourceCQL.(reflect.Value)
intoInt64736 := fromValue468.Int()
return intoInt64736
}
func TaintStepTest_ReflectValueInterface_B0I0O0(sourceCQL interface{}) interface{} {
fromValue516 := sourceCQL.(reflect.Value)
intoInterface246 := fromValue516.Interface()
return intoInterface246
}
func TaintStepTest_ReflectValueInterfaceData_B0I0O0(sourceCQL interface{}) interface{} {
fromValue679 := sourceCQL.(reflect.Value)
intoUintptr736 := fromValue679.InterfaceData()
return intoUintptr736
}
func TaintStepTest_ReflectValueMapIndex_B0I0O0(sourceCQL interface{}) interface{} {
fromValue839 := sourceCQL.(reflect.Value)
intoValue273 := fromValue839.MapIndex(reflect.Value{})
return intoValue273
}
func TaintStepTest_ReflectValueMapKeys_B0I0O0(sourceCQL interface{}) interface{} {
fromValue982 := sourceCQL.(reflect.Value)
intoValue458 := fromValue982.MapKeys()
return intoValue458
}
func TaintStepTest_ReflectValueMapRange_B0I0O0(sourceCQL interface{}) interface{} {
fromValue506 := sourceCQL.(reflect.Value)
intoMapIter213 := fromValue506.MapRange()
return intoMapIter213
}
func TaintStepTest_ReflectValueMethod_B0I0O0(sourceCQL interface{}) interface{} {
fromValue468 := sourceCQL.(reflect.Value)
intoValue219 := fromValue468.Method(0)
return intoValue219
}
func TaintStepTest_ReflectValueMethodByName_B0I0O0(sourceCQL interface{}) interface{} {
fromValue265 := sourceCQL.(reflect.Value)
intoValue971 := fromValue265.MethodByName("")
return intoValue971
}
func TaintStepTest_ReflectValuePointer_B0I0O0(sourceCQL interface{}) interface{} {
fromValue320 := sourceCQL.(reflect.Value)
intoUintptr545 := fromValue320.Pointer()
return intoUintptr545
}
func TaintStepTest_ReflectValueRecv_B0I0O0(sourceCQL interface{}) interface{} {
fromValue566 := sourceCQL.(reflect.Value)
intoValue497, _ := fromValue566.Recv()
return intoValue497
}
func TaintStepTest_ReflectValueSend_B0I0O0(sourceCQL interface{}) interface{} {
fromValue274 := sourceCQL.(reflect.Value)
var intoValue783 reflect.Value
intoValue783.Send(fromValue274)
return intoValue783
}
func TaintStepTest_ReflectValueSet_B0I0O0(sourceCQL interface{}) interface{} {
fromValue905 := sourceCQL.(reflect.Value)
var intoValue389 reflect.Value
intoValue389.Set(fromValue905)
return intoValue389
}
func TaintStepTest_ReflectValueSetBool_B0I0O0(sourceCQL interface{}) interface{} {
fromBool198 := sourceCQL.(bool)
var intoValue477 reflect.Value
intoValue477.SetBool(fromBool198)
return intoValue477
}
func TaintStepTest_ReflectValueSetBytes_B0I0O0(sourceCQL interface{}) interface{} {
fromByte544 := sourceCQL.([]byte)
var intoValue382 reflect.Value
intoValue382.SetBytes(fromByte544)
return intoValue382
}
func TaintStepTest_ReflectValueSetComplex_B0I0O0(sourceCQL interface{}) interface{} {
fromComplex128715 := sourceCQL.(complex128)
var intoValue179 reflect.Value
intoValue179.SetComplex(fromComplex128715)
return intoValue179
}
func TaintStepTest_ReflectValueSetFloat_B0I0O0(sourceCQL interface{}) interface{} {
fromFloat64366 := sourceCQL.(float64)
var intoValue648 reflect.Value
intoValue648.SetFloat(fromFloat64366)
return intoValue648
}
func TaintStepTest_ReflectValueSetInt_B0I0O0(sourceCQL interface{}) interface{} {
fromInt64544 := sourceCQL.(int64)
var intoValue484 reflect.Value
intoValue484.SetInt(fromInt64544)
return intoValue484
}
func TaintStepTest_ReflectValueSetMapIndex_B0I0O0(sourceCQL interface{}) interface{} {
fromValue824 := sourceCQL.(reflect.Value)
var intoValue754 reflect.Value
intoValue754.SetMapIndex(fromValue824, reflect.Value{})
return intoValue754
}
func TaintStepTest_ReflectValueSetMapIndex_B0I1O0(sourceCQL interface{}) interface{} {
fromValue680 := sourceCQL.(reflect.Value)
var intoValue722 reflect.Value
intoValue722.SetMapIndex(reflect.Value{}, fromValue680)
return intoValue722
}
func TaintStepTest_ReflectValueSetPointer_B0I0O0(sourceCQL interface{}) interface{} {
fromPointer506 := sourceCQL.(unsafe.Pointer)
var intoValue121 reflect.Value
intoValue121.SetPointer(fromPointer506)
return intoValue121
}
func TaintStepTest_ReflectValueSetString_B0I0O0(sourceCQL interface{}) interface{} {
fromString293 := sourceCQL.(string)
var intoValue151 reflect.Value
intoValue151.SetString(fromString293)
return intoValue151
}
func TaintStepTest_ReflectValueSetUint_B0I0O0(sourceCQL interface{}) interface{} {
fromUint64849 := sourceCQL.(uint64)
var intoValue322 reflect.Value
intoValue322.SetUint(fromUint64849)
return intoValue322
}
func TaintStepTest_ReflectValueSlice_B0I0O0(sourceCQL interface{}) interface{} {
fromValue339 := sourceCQL.(reflect.Value)
intoValue478 := fromValue339.Slice(0, 0)
return intoValue478
}
func TaintStepTest_ReflectValueSlice3_B0I0O0(sourceCQL interface{}) interface{} {
fromValue399 := sourceCQL.(reflect.Value)
intoValue426 := fromValue399.Slice3(0, 0, 0)
return intoValue426
}
func TaintStepTest_ReflectValueString_B0I0O0(sourceCQL interface{}) interface{} {
fromValue628 := sourceCQL.(reflect.Value)
intoString197 := fromValue628.String()
return intoString197
}
func TaintStepTest_ReflectValueTryRecv_B0I0O0(sourceCQL interface{}) interface{} {
fromValue216 := sourceCQL.(reflect.Value)
intoValue742, _ := fromValue216.TryRecv()
return intoValue742
}
func TaintStepTest_ReflectValueTrySend_B0I0O0(sourceCQL interface{}) interface{} {
fromValue906 := sourceCQL.(reflect.Value)
var intoValue620 reflect.Value
intoValue620.TrySend(fromValue906)
return intoValue620
}
func TaintStepTest_ReflectValueUint_B0I0O0(sourceCQL interface{}) interface{} {
fromValue158 := sourceCQL.(reflect.Value)
intoUint64353 := fromValue158.Uint()
return intoUint64353
}
func TaintStepTest_ReflectValueUnsafeAddr_B0I0O0(sourceCQL interface{}) interface{} {
fromValue625 := sourceCQL.(reflect.Value)
intoUintptr340 := fromValue625.UnsafeAddr()
return intoUintptr340
}
func RunAllTaints_Reflect() {
{
source := newSource(0)
out := TaintStepTest_ReflectAppend_B0I0O0(source)
sink(0, out)
}
{
source := newSource(1)
out := TaintStepTest_ReflectAppend_B0I1O0(source)
sink(1, out)
}
{
source := newSource(2)
out := TaintStepTest_ReflectAppend_B1I0O0(source)
sink(2, out)
}
{
source := newSource(3)
out := TaintStepTest_ReflectAppendSlice_B0I0O0(source)
sink(3, out)
}
{
source := newSource(4)
out := TaintStepTest_ReflectAppendSlice_B0I1O0(source)
sink(4, out)
}
{
source := newSource(5)
out := TaintStepTest_ReflectAppendSlice_B1I0O0(source)
sink(5, out)
}
{
source := newSource(6)
out := TaintStepTest_ReflectCopy_B0I0O0(source)
sink(6, out)
}
{
source := newSource(7)
out := TaintStepTest_ReflectIndirect_B0I0O0(source)
sink(7, out)
}
{
source := newSource(8)
out := TaintStepTest_ReflectValueOf_B0I0O0(source)
sink(8, out)
}
{
source := newSource(9)
out := TaintStepTest_ReflectMapIterKey_B0I0O0(source)
sink(9, out)
}
{
source := newSource(10)
out := TaintStepTest_ReflectMapIterValue_B0I0O0(source)
sink(10, out)
}
{
source := newSource(11)
out := TaintStepTest_ReflectStructTagGet_B0I0O0(source)
sink(11, out)
}
{
source := newSource(12)
out := TaintStepTest_ReflectStructTagLookup_B0I0O0(source)
sink(12, out)
}
{
source := newSource(13)
out := TaintStepTest_ReflectValueAddr_B0I0O0(source)
sink(13, out)
}
{
source := newSource(14)
out := TaintStepTest_ReflectValueBool_B0I0O0(source)
sink(14, out)
}
{
source := newSource(15)
out := TaintStepTest_ReflectValueBytes_B0I0O0(source)
sink(15, out)
}
{
source := newSource(16)
out := TaintStepTest_ReflectValueComplex_B0I0O0(source)
sink(16, out)
}
{
source := newSource(17)
out := TaintStepTest_ReflectValueConvert_B0I0O0(source)
sink(17, out)
}
{
source := newSource(18)
out := TaintStepTest_ReflectValueElem_B0I0O0(source)
sink(18, out)
}
{
source := newSource(19)
out := TaintStepTest_ReflectValueField_B0I0O0(source)
sink(19, out)
}
{
source := newSource(20)
out := TaintStepTest_ReflectValueFieldByIndex_B0I0O0(source)
sink(20, out)
}
{
source := newSource(21)
out := TaintStepTest_ReflectValueFieldByName_B0I0O0(source)
sink(21, out)
}
{
source := newSource(22)
out := TaintStepTest_ReflectValueFieldByNameFunc_B0I0O0(source)
sink(22, out)
}
{
source := newSource(23)
out := TaintStepTest_ReflectValueFloat_B0I0O0(source)
sink(23, out)
}
{
source := newSource(24)
out := TaintStepTest_ReflectValueIndex_B0I0O0(source)
sink(24, out)
}
{
source := newSource(25)
out := TaintStepTest_ReflectValueInt_B0I0O0(source)
sink(25, out)
}
{
source := newSource(26)
out := TaintStepTest_ReflectValueInterface_B0I0O0(source)
sink(26, out)
}
{
source := newSource(27)
out := TaintStepTest_ReflectValueInterfaceData_B0I0O0(source)
sink(27, out)
}
{
source := newSource(28)
out := TaintStepTest_ReflectValueMapIndex_B0I0O0(source)
sink(28, out)
}
{
source := newSource(29)
out := TaintStepTest_ReflectValueMapKeys_B0I0O0(source)
sink(29, out)
}
{
source := newSource(30)
out := TaintStepTest_ReflectValueMapRange_B0I0O0(source)
sink(30, out)
}
{
source := newSource(31)
out := TaintStepTest_ReflectValueMethod_B0I0O0(source)
sink(31, out)
}
{
source := newSource(32)
out := TaintStepTest_ReflectValueMethodByName_B0I0O0(source)
sink(32, out)
}
{
source := newSource(33)
out := TaintStepTest_ReflectValuePointer_B0I0O0(source)
sink(33, out)
}
{
source := newSource(34)
out := TaintStepTest_ReflectValueRecv_B0I0O0(source)
sink(34, out)
}
{
source := newSource(35)
out := TaintStepTest_ReflectValueSend_B0I0O0(source)
sink(35, out)
}
{
source := newSource(36)
out := TaintStepTest_ReflectValueSet_B0I0O0(source)
sink(36, out)
}
{
source := newSource(37)
out := TaintStepTest_ReflectValueSetBool_B0I0O0(source)
sink(37, out)
}
{
source := newSource(38)
out := TaintStepTest_ReflectValueSetBytes_B0I0O0(source)
sink(38, out)
}
{
source := newSource(39)
out := TaintStepTest_ReflectValueSetComplex_B0I0O0(source)
sink(39, out)
}
{
source := newSource(40)
out := TaintStepTest_ReflectValueSetFloat_B0I0O0(source)
sink(40, out)
}
{
source := newSource(41)
out := TaintStepTest_ReflectValueSetInt_B0I0O0(source)
sink(41, out)
}
{
source := newSource(42)
out := TaintStepTest_ReflectValueSetMapIndex_B0I0O0(source)
sink(42, out)
}
{
source := newSource(43)
out := TaintStepTest_ReflectValueSetMapIndex_B0I1O0(source)
sink(43, out)
}
{
source := newSource(44)
out := TaintStepTest_ReflectValueSetPointer_B0I0O0(source)
sink(44, out)
}
{
source := newSource(45)
out := TaintStepTest_ReflectValueSetString_B0I0O0(source)
sink(45, out)
}
{
source := newSource(46)
out := TaintStepTest_ReflectValueSetUint_B0I0O0(source)
sink(46, out)
}
{
source := newSource(47)
out := TaintStepTest_ReflectValueSlice_B0I0O0(source)
sink(47, out)
}
{
source := newSource(48)
out := TaintStepTest_ReflectValueSlice3_B0I0O0(source)
sink(48, out)
}
{
source := newSource(49)
out := TaintStepTest_ReflectValueString_B0I0O0(source)
sink(49, out)
}
{
source := newSource(50)
out := TaintStepTest_ReflectValueTryRecv_B0I0O0(source)
sink(50, out)
}
{
source := newSource(51)
out := TaintStepTest_ReflectValueTrySend_B0I0O0(source)
sink(51, out)
}
{
source := newSource(52)
out := TaintStepTest_ReflectValueUint_B0I0O0(source)
sink(52, out)
}
{
source := newSource(53)
out := TaintStepTest_ReflectValueUnsafeAddr_B0I0O0(source)
sink(53, out)
}
}