From df71f0bf8bab820df6eea00adbc85a15367eedb2 Mon Sep 17 00:00:00 2001 From: Slavomir Date: Tue, 4 Aug 2020 17:53:50 +0300 Subject: [PATCH] Remove ReadByte, WriteByte, ReadRune, WriteRune --- ql/src/semmle/go/frameworks/stdlib/Bufio.qll | 16 -- ql/src/semmle/go/frameworks/stdlib/Bytes.qll | 24 --- .../go/frameworks/StdlibTaintFlow/Bufio.go | 148 ++++++--------- .../go/frameworks/StdlibTaintFlow/Bytes.go | 170 ++++++------------ 4 files changed, 102 insertions(+), 256 deletions(-) diff --git a/ql/src/semmle/go/frameworks/stdlib/Bufio.qll b/ql/src/semmle/go/frameworks/stdlib/Bufio.qll index ade42ccc6fb..d5a6f80ead9 100644 --- a/ql/src/semmle/go/frameworks/stdlib/Bufio.qll +++ b/ql/src/semmle/go/frameworks/stdlib/Bufio.qll @@ -70,10 +70,6 @@ module Bufio { this.hasQualifiedName("bufio", "Reader", "Peek") and (inp.isReceiver() and outp.isResult(0)) or - // signature: func (*Reader).ReadByte() (byte, error) - this.hasQualifiedName("bufio", "Reader", "ReadByte") and - (inp.isReceiver() and outp.isResult(0)) - or // signature: func (*Reader).ReadBytes(delim byte) ([]byte, error) this.hasQualifiedName("bufio", "Reader", "ReadBytes") and (inp.isReceiver() and outp.isResult(0)) @@ -82,10 +78,6 @@ module Bufio { this.hasQualifiedName("bufio", "Reader", "ReadLine") and (inp.isReceiver() and outp.isResult(0)) or - // signature: func (*Reader).ReadRune() (r rune, size int, err error) - this.hasQualifiedName("bufio", "Reader", "ReadRune") and - (inp.isReceiver() and outp.isResult(0)) - or // signature: func (*Reader).ReadSlice(delim byte) (line []byte, err error) this.hasQualifiedName("bufio", "Reader", "ReadSlice") and (inp.isReceiver() and outp.isResult(0)) @@ -122,14 +114,6 @@ module Bufio { this.hasQualifiedName("bufio", "Writer", "Write") and (inp.isParameter(0) and outp.isReceiver()) or - // signature: func (*Writer).WriteByte(c byte) error - this.hasQualifiedName("bufio", "Writer", "WriteByte") and - (inp.isParameter(0) and outp.isReceiver()) - or - // signature: func (*Writer).WriteRune(r rune) (size int, err error) - this.hasQualifiedName("bufio", "Writer", "WriteRune") and - (inp.isParameter(0) and outp.isReceiver()) - or // signature: func (*Writer).WriteString(s string) (int, error) this.hasQualifiedName("bufio", "Writer", "WriteString") and (inp.isParameter(0) and outp.isReceiver()) diff --git a/ql/src/semmle/go/frameworks/stdlib/Bytes.qll b/ql/src/semmle/go/frameworks/stdlib/Bytes.qll index 56a677d1e09..a03df30aa21 100644 --- a/ql/src/semmle/go/frameworks/stdlib/Bytes.qll +++ b/ql/src/semmle/go/frameworks/stdlib/Bytes.qll @@ -158,10 +158,6 @@ module Bytes { this.hasQualifiedName("bytes", "Buffer", "Next") and (inp.isReceiver() and outp.isResult()) or - // signature: func (*Buffer).ReadByte() (byte, error) - this.hasQualifiedName("bytes", "Buffer", "ReadByte") and - (inp.isReceiver() and outp.isResult(0)) - or // signature: func (*Buffer).ReadBytes(delim byte) (line []byte, err error) this.hasQualifiedName("bytes", "Buffer", "ReadBytes") and (inp.isReceiver() and outp.isResult(0)) @@ -170,10 +166,6 @@ module Bytes { this.hasQualifiedName("bytes", "Buffer", "ReadFrom") and (inp.isParameter(0) and outp.isReceiver()) or - // signature: func (*Buffer).ReadRune() (r rune, size int, err error) - this.hasQualifiedName("bytes", "Buffer", "ReadRune") and - (inp.isReceiver() and outp.isResult(0)) - or // signature: func (*Buffer).ReadString(delim byte) (line string, err error) this.hasQualifiedName("bytes", "Buffer", "ReadString") and (inp.isReceiver() and outp.isResult(0)) @@ -186,14 +178,6 @@ module Bytes { this.hasQualifiedName("bytes", "Buffer", "Write") and (inp.isParameter(0) and outp.isReceiver()) or - // signature: func (*Buffer).WriteByte(c byte) error - this.hasQualifiedName("bytes", "Buffer", "WriteByte") and - (inp.isParameter(0) and outp.isReceiver()) - or - // signature: func (*Buffer).WriteRune(r rune) (n int, err error) - this.hasQualifiedName("bytes", "Buffer", "WriteRune") and - (inp.isParameter(0) and outp.isReceiver()) - or // signature: func (*Buffer).WriteString(s string) (n int, err error) this.hasQualifiedName("bytes", "Buffer", "WriteString") and (inp.isParameter(0) and outp.isReceiver()) @@ -206,14 +190,6 @@ module Bytes { this.hasQualifiedName("bytes", "Reader", "ReadAt") and (inp.isReceiver() and outp.isParameter(0)) or - // signature: func (*Reader).ReadByte() (byte, error) - this.hasQualifiedName("bytes", "Reader", "ReadByte") and - (inp.isReceiver() and outp.isResult(0)) - or - // signature: func (*Reader).ReadRune() (ch rune, size int, err error) - this.hasQualifiedName("bytes", "Reader", "ReadRune") and - (inp.isReceiver() and outp.isResult(0)) - or // signature: func (*Reader).Reset(b []byte) this.hasQualifiedName("bytes", "Reader", "Reset") and (inp.isParameter(0) and outp.isReceiver()) diff --git a/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Bufio.go b/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Bufio.go index 1b2bfd948c3..bec4127686c 100644 --- a/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Bufio.go +++ b/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Bufio.go @@ -92,108 +92,82 @@ func TaintStepTest_BufioReaderRead_B0I0O0(sourceCQL interface{}) interface{} { return intoByte898 } -func TaintStepTest_BufioReaderReadByte_B0I0O0(sourceCQL interface{}) interface{} { +func TaintStepTest_BufioReaderReadBytes_B0I0O0(sourceCQL interface{}) interface{} { fromReader598 := sourceCQL.(bufio.Reader) - intoByte631, _ := fromReader598.ReadByte() + intoByte631, _ := fromReader598.ReadBytes(0) return intoByte631 } -func TaintStepTest_BufioReaderReadBytes_B0I0O0(sourceCQL interface{}) interface{} { +func TaintStepTest_BufioReaderReadLine_B0I0O0(sourceCQL interface{}) interface{} { fromReader165 := sourceCQL.(bufio.Reader) - intoByte150, _ := fromReader165.ReadBytes(0) + intoByte150, _, _ := fromReader165.ReadLine() return intoByte150 } -func TaintStepTest_BufioReaderReadLine_B0I0O0(sourceCQL interface{}) interface{} { +func TaintStepTest_BufioReaderReadSlice_B0I0O0(sourceCQL interface{}) interface{} { fromReader340 := sourceCQL.(bufio.Reader) - intoByte471, _, _ := fromReader340.ReadLine() + intoByte471, _ := fromReader340.ReadSlice(0) return intoByte471 } -func TaintStepTest_BufioReaderReadRune_B0I0O0(sourceCQL interface{}) interface{} { - fromReader290 := sourceCQL.(bufio.Reader) - intoRune758, _, _ := fromReader290.ReadRune() - return intoRune758 -} - -func TaintStepTest_BufioReaderReadSlice_B0I0O0(sourceCQL interface{}) interface{} { - fromReader396 := sourceCQL.(bufio.Reader) - intoByte707, _ := fromReader396.ReadSlice(0) - return intoByte707 -} - func TaintStepTest_BufioReaderReadString_B0I0O0(sourceCQL interface{}) interface{} { - fromReader912 := sourceCQL.(bufio.Reader) - intoString718, _ := fromReader912.ReadString(0) - return intoString718 + fromReader290 := sourceCQL.(bufio.Reader) + intoString758, _ := fromReader290.ReadString(0) + return intoString758 } func TaintStepTest_BufioReaderReset_B0I0O0(sourceCQL interface{}) interface{} { - fromReader972 := sourceCQL.(io.Reader) - var intoReader633 bufio.Reader - intoReader633.Reset(fromReader972) - return intoReader633 + fromReader396 := sourceCQL.(io.Reader) + var intoReader707 bufio.Reader + intoReader707.Reset(fromReader396) + return intoReader707 } func TaintStepTest_BufioReaderWriteTo_B0I0O0(sourceCQL interface{}) interface{} { - fromReader316 := sourceCQL.(bufio.Reader) - var intoWriter145 io.Writer - fromReader316.WriteTo(intoWriter145) - return intoWriter145 + fromReader912 := sourceCQL.(bufio.Reader) + var intoWriter718 io.Writer + fromReader912.WriteTo(intoWriter718) + return intoWriter718 } func TaintStepTest_BufioScannerBytes_B0I0O0(sourceCQL interface{}) interface{} { - fromScanner817 := sourceCQL.(bufio.Scanner) - intoByte474 := fromScanner817.Bytes() - return intoByte474 + fromScanner972 := sourceCQL.(bufio.Scanner) + intoByte633 := fromScanner972.Bytes() + return intoByte633 } func TaintStepTest_BufioScannerText_B0I0O0(sourceCQL interface{}) interface{} { - fromScanner832 := sourceCQL.(bufio.Scanner) - intoString378 := fromScanner832.Text() - return intoString378 + fromScanner316 := sourceCQL.(bufio.Scanner) + intoString145 := fromScanner316.Text() + return intoString145 } func TaintStepTest_BufioWriterReadFrom_B0I0O0(sourceCQL interface{}) interface{} { - fromReader541 := sourceCQL.(io.Reader) - var intoWriter139 bufio.Writer - intoWriter139.ReadFrom(fromReader541) - return intoWriter139 + fromReader817 := sourceCQL.(io.Reader) + var intoWriter474 bufio.Writer + intoWriter474.ReadFrom(fromReader817) + return intoWriter474 } func TaintStepTest_BufioWriterReset_B0I0O0(sourceCQL interface{}) interface{} { - fromWriter814 := sourceCQL.(bufio.Writer) - var intoWriter768 io.Writer - fromWriter814.Reset(intoWriter768) - return intoWriter768 + fromWriter832 := sourceCQL.(bufio.Writer) + var intoWriter378 io.Writer + fromWriter832.Reset(intoWriter378) + return intoWriter378 } func TaintStepTest_BufioWriterWrite_B0I0O0(sourceCQL interface{}) interface{} { - fromByte468 := sourceCQL.([]byte) - var intoWriter736 bufio.Writer - intoWriter736.Write(fromByte468) - return intoWriter736 -} - -func TaintStepTest_BufioWriterWriteByte_B0I0O0(sourceCQL interface{}) interface{} { - fromByte516 := sourceCQL.(byte) - var intoWriter246 bufio.Writer - intoWriter246.WriteByte(fromByte516) - return intoWriter246 -} - -func TaintStepTest_BufioWriterWriteRune_B0I0O0(sourceCQL interface{}) interface{} { - fromRune679 := sourceCQL.(rune) - var intoWriter736 bufio.Writer - intoWriter736.WriteRune(fromRune679) - return intoWriter736 + fromByte541 := sourceCQL.([]byte) + var intoWriter139 bufio.Writer + intoWriter139.Write(fromByte541) + return intoWriter139 } func TaintStepTest_BufioWriterWriteString_B0I0O0(sourceCQL interface{}) interface{} { - fromString839 := sourceCQL.(string) - var intoWriter273 bufio.Writer - intoWriter273.WriteString(fromString839) - return intoWriter273 + fromString814 := sourceCQL.(string) + var intoWriter768 bufio.Writer + intoWriter768.WriteString(fromString814) + return intoWriter768 } func RunAllTaints_Bufio() { @@ -264,82 +238,62 @@ func RunAllTaints_Bufio() { } { source := newSource(13) - out := TaintStepTest_BufioReaderReadByte_B0I0O0(source) + out := TaintStepTest_BufioReaderReadBytes_B0I0O0(source) sink(13, out) } { source := newSource(14) - out := TaintStepTest_BufioReaderReadBytes_B0I0O0(source) + out := TaintStepTest_BufioReaderReadLine_B0I0O0(source) sink(14, out) } { source := newSource(15) - out := TaintStepTest_BufioReaderReadLine_B0I0O0(source) + out := TaintStepTest_BufioReaderReadSlice_B0I0O0(source) sink(15, out) } { source := newSource(16) - out := TaintStepTest_BufioReaderReadRune_B0I0O0(source) + out := TaintStepTest_BufioReaderReadString_B0I0O0(source) sink(16, out) } { source := newSource(17) - out := TaintStepTest_BufioReaderReadSlice_B0I0O0(source) + out := TaintStepTest_BufioReaderReset_B0I0O0(source) sink(17, out) } { source := newSource(18) - out := TaintStepTest_BufioReaderReadString_B0I0O0(source) + out := TaintStepTest_BufioReaderWriteTo_B0I0O0(source) sink(18, out) } { source := newSource(19) - out := TaintStepTest_BufioReaderReset_B0I0O0(source) + out := TaintStepTest_BufioScannerBytes_B0I0O0(source) sink(19, out) } { source := newSource(20) - out := TaintStepTest_BufioReaderWriteTo_B0I0O0(source) + out := TaintStepTest_BufioScannerText_B0I0O0(source) sink(20, out) } { source := newSource(21) - out := TaintStepTest_BufioScannerBytes_B0I0O0(source) + out := TaintStepTest_BufioWriterReadFrom_B0I0O0(source) sink(21, out) } { source := newSource(22) - out := TaintStepTest_BufioScannerText_B0I0O0(source) + out := TaintStepTest_BufioWriterReset_B0I0O0(source) sink(22, out) } { source := newSource(23) - out := TaintStepTest_BufioWriterReadFrom_B0I0O0(source) + out := TaintStepTest_BufioWriterWrite_B0I0O0(source) sink(23, out) } { source := newSource(24) - out := TaintStepTest_BufioWriterReset_B0I0O0(source) + out := TaintStepTest_BufioWriterWriteString_B0I0O0(source) sink(24, out) } - { - source := newSource(25) - out := TaintStepTest_BufioWriterWrite_B0I0O0(source) - sink(25, out) - } - { - source := newSource(26) - out := TaintStepTest_BufioWriterWriteByte_B0I0O0(source) - sink(26, out) - } - { - source := newSource(27) - out := TaintStepTest_BufioWriterWriteRune_B0I0O0(source) - sink(27, out) - } - { - source := newSource(28) - out := TaintStepTest_BufioWriterWriteString_B0I0O0(source) - sink(28, out) - } } diff --git a/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Bytes.go b/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Bytes.go index 0a2f1b89b4b..a4d3230c009 100644 --- a/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Bytes.go +++ b/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Bytes.go @@ -242,116 +242,78 @@ func TaintStepTest_BytesBufferRead_B0I0O0(sourceCQL interface{}) interface{} { return intoByte382 } -func TaintStepTest_BytesBufferReadByte_B0I0O0(sourceCQL interface{}) interface{} { +func TaintStepTest_BytesBufferReadBytes_B0I0O0(sourceCQL interface{}) interface{} { fromBuffer715 := sourceCQL.(bytes.Buffer) - intoByte179, _ := fromBuffer715.ReadByte() + intoByte179, _ := fromBuffer715.ReadBytes(0) return intoByte179 } -func TaintStepTest_BytesBufferReadBytes_B0I0O0(sourceCQL interface{}) interface{} { - fromBuffer366 := sourceCQL.(bytes.Buffer) - intoByte648, _ := fromBuffer366.ReadBytes(0) - return intoByte648 -} - func TaintStepTest_BytesBufferReadFrom_B0I0O0(sourceCQL interface{}) interface{} { - fromReader544 := sourceCQL.(io.Reader) - var intoBuffer484 bytes.Buffer - intoBuffer484.ReadFrom(fromReader544) - return intoBuffer484 -} - -func TaintStepTest_BytesBufferReadRune_B0I0O0(sourceCQL interface{}) interface{} { - fromBuffer824 := sourceCQL.(bytes.Buffer) - intoRune754, _, _ := fromBuffer824.ReadRune() - return intoRune754 + fromReader366 := sourceCQL.(io.Reader) + var intoBuffer648 bytes.Buffer + intoBuffer648.ReadFrom(fromReader366) + return intoBuffer648 } func TaintStepTest_BytesBufferReadString_B0I0O0(sourceCQL interface{}) interface{} { - fromBuffer680 := sourceCQL.(bytes.Buffer) - intoString722, _ := fromBuffer680.ReadString(0) - return intoString722 + fromBuffer544 := sourceCQL.(bytes.Buffer) + intoString484, _ := fromBuffer544.ReadString(0) + return intoString484 } func TaintStepTest_BytesBufferString_B0I0O0(sourceCQL interface{}) interface{} { - fromBuffer506 := sourceCQL.(bytes.Buffer) - intoString121 := fromBuffer506.String() - return intoString121 + fromBuffer824 := sourceCQL.(bytes.Buffer) + intoString754 := fromBuffer824.String() + return intoString754 } func TaintStepTest_BytesBufferWrite_B0I0O0(sourceCQL interface{}) interface{} { - fromByte293 := sourceCQL.([]byte) - var intoBuffer151 bytes.Buffer - intoBuffer151.Write(fromByte293) - return intoBuffer151 -} - -func TaintStepTest_BytesBufferWriteByte_B0I0O0(sourceCQL interface{}) interface{} { - fromByte849 := sourceCQL.(byte) - var intoBuffer322 bytes.Buffer - intoBuffer322.WriteByte(fromByte849) - return intoBuffer322 -} - -func TaintStepTest_BytesBufferWriteRune_B0I0O0(sourceCQL interface{}) interface{} { - fromRune339 := sourceCQL.(rune) - var intoBuffer478 bytes.Buffer - intoBuffer478.WriteRune(fromRune339) - return intoBuffer478 + fromByte680 := sourceCQL.([]byte) + var intoBuffer722 bytes.Buffer + intoBuffer722.Write(fromByte680) + return intoBuffer722 } func TaintStepTest_BytesBufferWriteString_B0I0O0(sourceCQL interface{}) interface{} { - fromString399 := sourceCQL.(string) - var intoBuffer426 bytes.Buffer - intoBuffer426.WriteString(fromString399) - return intoBuffer426 + fromString506 := sourceCQL.(string) + var intoBuffer121 bytes.Buffer + intoBuffer121.WriteString(fromString506) + return intoBuffer121 } func TaintStepTest_BytesBufferWriteTo_B0I0O0(sourceCQL interface{}) interface{} { - fromBuffer628 := sourceCQL.(bytes.Buffer) - var intoWriter197 io.Writer - fromBuffer628.WriteTo(intoWriter197) - return intoWriter197 + fromBuffer293 := sourceCQL.(bytes.Buffer) + var intoWriter151 io.Writer + fromBuffer293.WriteTo(intoWriter151) + return intoWriter151 } func TaintStepTest_BytesReaderRead_B0I0O0(sourceCQL interface{}) interface{} { - fromReader216 := sourceCQL.(bytes.Reader) - var intoByte742 []byte - fromReader216.Read(intoByte742) - return intoByte742 + fromReader849 := sourceCQL.(bytes.Reader) + var intoByte322 []byte + fromReader849.Read(intoByte322) + return intoByte322 } func TaintStepTest_BytesReaderReadAt_B0I0O0(sourceCQL interface{}) interface{} { - fromReader906 := sourceCQL.(bytes.Reader) - var intoByte620 []byte - fromReader906.ReadAt(intoByte620, 0) - return intoByte620 -} - -func TaintStepTest_BytesReaderReadByte_B0I0O0(sourceCQL interface{}) interface{} { - fromReader158 := sourceCQL.(bytes.Reader) - intoByte353, _ := fromReader158.ReadByte() - return intoByte353 -} - -func TaintStepTest_BytesReaderReadRune_B0I0O0(sourceCQL interface{}) interface{} { - fromReader625 := sourceCQL.(bytes.Reader) - intoRune340, _, _ := fromReader625.ReadRune() - return intoRune340 + fromReader339 := sourceCQL.(bytes.Reader) + var intoByte478 []byte + fromReader339.ReadAt(intoByte478, 0) + return intoByte478 } func TaintStepTest_BytesReaderReset_B0I0O0(sourceCQL interface{}) interface{} { - fromByte741 := sourceCQL.([]byte) - var intoReader199 bytes.Reader - intoReader199.Reset(fromByte741) - return intoReader199 + fromByte399 := sourceCQL.([]byte) + var intoReader426 bytes.Reader + intoReader426.Reset(fromByte399) + return intoReader426 } func TaintStepTest_BytesReaderWriteTo_B0I0O0(sourceCQL interface{}) interface{} { - fromReader873 := sourceCQL.(bytes.Reader) - var intoWriter304 io.Writer - fromReader873.WriteTo(intoWriter304) - return intoWriter304 + fromReader628 := sourceCQL.(bytes.Reader) + var intoWriter197 io.Writer + fromReader628.WriteTo(intoWriter197) + return intoWriter197 } func RunAllTaints_Bytes() { @@ -552,87 +514,57 @@ func RunAllTaints_Bytes() { } { source := newSource(39) - out := TaintStepTest_BytesBufferReadByte_B0I0O0(source) + out := TaintStepTest_BytesBufferReadBytes_B0I0O0(source) sink(39, out) } { source := newSource(40) - out := TaintStepTest_BytesBufferReadBytes_B0I0O0(source) + out := TaintStepTest_BytesBufferReadFrom_B0I0O0(source) sink(40, out) } { source := newSource(41) - out := TaintStepTest_BytesBufferReadFrom_B0I0O0(source) + out := TaintStepTest_BytesBufferReadString_B0I0O0(source) sink(41, out) } { source := newSource(42) - out := TaintStepTest_BytesBufferReadRune_B0I0O0(source) + out := TaintStepTest_BytesBufferString_B0I0O0(source) sink(42, out) } { source := newSource(43) - out := TaintStepTest_BytesBufferReadString_B0I0O0(source) + out := TaintStepTest_BytesBufferWrite_B0I0O0(source) sink(43, out) } { source := newSource(44) - out := TaintStepTest_BytesBufferString_B0I0O0(source) + out := TaintStepTest_BytesBufferWriteString_B0I0O0(source) sink(44, out) } { source := newSource(45) - out := TaintStepTest_BytesBufferWrite_B0I0O0(source) + out := TaintStepTest_BytesBufferWriteTo_B0I0O0(source) sink(45, out) } { source := newSource(46) - out := TaintStepTest_BytesBufferWriteByte_B0I0O0(source) + out := TaintStepTest_BytesReaderRead_B0I0O0(source) sink(46, out) } { source := newSource(47) - out := TaintStepTest_BytesBufferWriteRune_B0I0O0(source) + out := TaintStepTest_BytesReaderReadAt_B0I0O0(source) sink(47, out) } { source := newSource(48) - out := TaintStepTest_BytesBufferWriteString_B0I0O0(source) + out := TaintStepTest_BytesReaderReset_B0I0O0(source) sink(48, out) } { source := newSource(49) - out := TaintStepTest_BytesBufferWriteTo_B0I0O0(source) + out := TaintStepTest_BytesReaderWriteTo_B0I0O0(source) sink(49, out) } - { - source := newSource(50) - out := TaintStepTest_BytesReaderRead_B0I0O0(source) - sink(50, out) - } - { - source := newSource(51) - out := TaintStepTest_BytesReaderReadAt_B0I0O0(source) - sink(51, out) - } - { - source := newSource(52) - out := TaintStepTest_BytesReaderReadByte_B0I0O0(source) - sink(52, out) - } - { - source := newSource(53) - out := TaintStepTest_BytesReaderReadRune_B0I0O0(source) - sink(53, out) - } - { - source := newSource(54) - out := TaintStepTest_BytesReaderReset_B0I0O0(source) - sink(54, out) - } - { - source := newSource(55) - out := TaintStepTest_BytesReaderWriteTo_B0I0O0(source) - sink(55, out) - } }