33
44// --- tests ---
55
6- func source ( ) -> UInt8 { return 0 ; }
6+ func source ( _ label : String ) -> UInt8 { return 0 ; }
77func source2 ( ) -> Int { return 0 ; }
88func sink ( arg : Any ) { }
99
1010func taintThroughClosurePointer ( ) {
1111 var myArray1 : [ UInt8 ] = [ 1 , 2 , 3 , 4 ]
1212
13- myArray1 [ 0 ] = source ( )
14- sink ( arg : myArray1 ) // $ tainted=13
15- sink ( arg : myArray1 [ 0 ] ) // $ tainted=13
13+ myArray1 [ 0 ] = source ( " myArray1 " )
14+ sink ( arg : myArray1 ) // $ tainted=myArray1
15+ sink ( arg : myArray1 [ 0 ] ) // $ tainted=myArray1
1616 let return1 = myArray1 . withUnsafeBytes ( {
1717 ptr1 in
18- sink ( arg : ptr1 ) // $ tainted=13
19- sink ( arg : ptr1 [ 0 ] ) // $ tainted=13
20- return source ( )
18+ sink ( arg : ptr1 ) // $ tainted=myArray1
19+ sink ( arg : ptr1 [ 0 ] ) // $ tainted=myArray1
20+ return source ( " return1 " )
2121 } )
22- sink ( arg : return1 ) // $ tainted=20
22+ sink ( arg : return1 ) // $ tainted=return1
2323
2424 // ---
2525
2626 var myArray2 : [ UInt8 ] = [ 1 , 2 , 3 , 4 ]
2727
28- myArray2 [ 0 ] = source ( )
29- sink ( arg : myArray2 ) // $ tainted=28
30- sink ( arg : myArray2 [ 0 ] ) // $ tainted=28
28+ myArray2 [ 0 ] = source ( " myArray2 " )
29+ sink ( arg : myArray2 ) // $ tainted=myArray2
30+ sink ( arg : myArray2 [ 0 ] ) // $ tainted=myArray2
3131 let return2 = myArray2 . withUnsafeBufferPointer ( {
3232 ptr2 in
33- sink ( arg : ptr2 ) // $ tainted=28
34- sink ( arg : ptr2 [ 0 ] ) // $ tainted=28
35- return source ( )
33+ sink ( arg : ptr2 ) // $ tainted=myArray2
34+ sink ( arg : ptr2 [ 0 ] ) // $ tainted=myArray2
35+ return source ( " return2 " )
3636 } )
37- sink ( arg : return2 ) // $ tainted=35
37+ sink ( arg : return2 ) // $ tainted=return2
3838}
3939
4040func taintThroughMutablePointer ( ) {
@@ -44,15 +44,15 @@ func taintThroughMutablePointer() {
4444 sink ( arg : myArray1 [ 0 ] )
4545 let return1 = myArray1 . withUnsafeMutableBufferPointer ( {
4646 buffer in
47- buffer . update ( repeating : source ( ) )
48- sink ( arg : buffer ) // $ tainted=47
49- sink ( arg : buffer [ 0 ] ) // $ tainted=47
50- sink ( arg : buffer . baseAddress ! . pointee ) // $ MISSING: tainted=47
51- return source ( )
47+ buffer . update ( repeating : source ( " array1write " ) )
48+ sink ( arg : buffer ) // $ tainted=array1write
49+ sink ( arg : buffer [ 0 ] ) // $ tainted=array1write
50+ sink ( arg : buffer . baseAddress ! . pointee ) // $ MISSING: tainted=array1write
51+ return source ( " return1 " )
5252 } )
53- sink ( arg : return1 ) // $ tainted=51
54- sink ( arg : myArray1 ) // $ tainted=47
55- sink ( arg : myArray1 [ 0 ] ) // $ tainted=47
53+ sink ( arg : return1 ) // $ tainted=return1
54+ sink ( arg : myArray1 ) // $ tainted=array1write
55+ sink ( arg : myArray1 [ 0 ] ) // $ tainted=array1write
5656
5757 // ---
5858
@@ -62,15 +62,15 @@ func taintThroughMutablePointer() {
6262 sink ( arg : myArray2 [ 0 ] )
6363 let return2 = myArray2 . withUnsafeMutableBufferPointer ( {
6464 buffer in
65- buffer . baseAddress ! . pointee = source ( )
65+ buffer . baseAddress ! . pointee = source ( " array2write " )
6666 sink ( arg : buffer )
67- sink ( arg : buffer [ 0 ] ) // $ MISSING: tainted=65
68- sink ( arg : buffer . baseAddress ! . pointee ) // $ MISSING: tainted=65
69- return source ( )
67+ sink ( arg : buffer [ 0 ] ) // $ MISSING: tainted=array2write
68+ sink ( arg : buffer . baseAddress ! . pointee ) // $ MISSING: tainted=array2write
69+ return source ( " return2 " )
7070 } )
71- sink ( arg : return2 ) // $ tainted=69
71+ sink ( arg : return2 ) // $ tainted=return2
7272 sink ( arg : myArray2 )
73- sink ( arg : myArray2 [ 0 ] ) // $ MISSING: tainted=65
73+ sink ( arg : myArray2 [ 0 ] ) // $ MISSING: tainted=array2write
7474
7575 // ---
7676
@@ -80,44 +80,44 @@ func taintThroughMutablePointer() {
8080 sink ( arg : myArray3 [ 0 ] )
8181 let return3 = myArray3 . withContiguousMutableStorageIfAvailable ( {
8282 ptr in
83- ptr . update ( repeating : source ( ) )
84- sink ( arg : ptr ) // $ tainted=83
85- sink ( arg : ptr [ 0 ] ) // $ tainted=83
86- return source ( )
83+ ptr . update ( repeating : source ( " array3write " ) )
84+ sink ( arg : ptr ) // $ tainted=array3write
85+ sink ( arg : ptr [ 0 ] ) // $ tainted=array3write
86+ return source ( " return3 " )
8787 } )
88- sink ( arg : return3 ! ) // $ tainted=86
89- sink ( arg : myArray3 ) // $ tainted=83
90- sink ( arg : myArray3 [ 0 ] ) // $ tainted=83
88+ sink ( arg : return3 ! ) // $ tainted=return3
89+ sink ( arg : myArray3 ) // $ tainted=array3write
90+ sink ( arg : myArray3 [ 0 ] ) // $ tainted=array3write
9191
9292 // ---
9393
9494 var myArray4 : [ UInt8 ] = [ 1 , 2 , 3 , 4 ]
9595 var myArray5 : [ UInt8 ] = [ 5 , 6 , 7 , 8 ]
9696
97- myArray5 [ 0 ] = source ( )
97+ myArray5 [ 0 ] = source ( " array5write " )
9898 sink ( arg : myArray4 )
9999 sink ( arg : myArray4 [ 0 ] )
100- sink ( arg : myArray5 ) // $ tainted=97
101- sink ( arg : myArray5 [ 0 ] ) // $ tainted=97
100+ sink ( arg : myArray5 ) // $ tainted=array5write
101+ sink ( arg : myArray5 [ 0 ] ) // $ tainted=array5write
102102 let return4 = myArray4 . withUnsafeMutableBytes ( {
103103 ptr4 in
104104 let return5 = myArray5 . withUnsafeBytes ( {
105105 ptr5 in
106- sink ( arg : ptr5 ) // $ tainted=97
107- sink ( arg : ptr5 [ 0 ] ) // $ tainted=97
106+ sink ( arg : ptr5 ) // $ tainted=array5write
107+ sink ( arg : ptr5 [ 0 ] ) // $ tainted=array5write
108108 ptr4 . copyBytes ( from : ptr5 )
109109 sink ( arg : ptr4 )
110- sink ( arg : ptr4 [ 0 ] ) // $ MISSING: tainted=97
111- return source ( )
110+ sink ( arg : ptr4 [ 0 ] ) // $ MISSING: tainted=array5write
111+ return source ( " return5 " )
112112 } )
113- sink ( arg : return5 ) // $ tainted=111
114- return source ( )
113+ sink ( arg : return5 ) // $ tainted=return5
114+ return source ( " return4 " )
115115 } )
116- sink ( arg : return4 ) // $ tainted=114
116+ sink ( arg : return4 ) // $ tainted=return4
117117 sink ( arg : myArray4 )
118- sink ( arg : myArray4 [ 0 ] ) // $ MISSING: tainted=97
119- sink ( arg : myArray5 ) // $ tainted=97
120- sink ( arg : myArray5 [ 0 ] ) // $ tainted=97
118+ sink ( arg : myArray4 [ 0 ] ) // $ MISSING: tainted=array5write
119+ sink ( arg : myArray5 ) // $ tainted=array5write
120+ sink ( arg : myArray5 [ 0 ] ) // $ tainted=array5write
121121
122122 // ---
123123
@@ -131,9 +131,9 @@ func taintThroughMutablePointer() {
131131 ptr . update ( repeating : source2 ( ) )
132132 sink ( arg : ptr ) // $ tainted=131
133133 sink ( arg : ptr [ 0 ] ) // $ tainted=131
134- return source ( )
134+ return source ( " return6 " )
135135 } )
136- sink ( arg : return6 ! ) // $ tainted=134
136+ sink ( arg : return6 ! ) // $ tainted=return6
137137 sink ( arg : myMutableBuffer ) // $ tainted=131
138138 sink ( arg : myMutableBuffer [ 0 ] ) // $ tainted=131
139139}
0 commit comments