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