Skip to content

Commit 3e65c8d

Browse files
committed
database/sql tests
1 parent e9fdc8a commit 3e65c8d

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
package test
2+
3+
import (
4+
"database/sql"
5+
)
6+
7+
// test querying a Conn
8+
func testConnQuery(conn *sql.Conn) {
9+
rows, err := conn.QueryContext(nil, "SELECT * FROM users") // $ source
10+
11+
if err != nil {
12+
return
13+
}
14+
15+
defer rows.Close()
16+
17+
for rows.Next() {
18+
var id int
19+
var name string
20+
err = rows.Scan(&id, &name)
21+
22+
sink(id, name) // $ hasTaintFlow="id" hasTaintFlow="name"
23+
}
24+
25+
row := conn.QueryRowContext(nil, "SELECT * FROM users WHERE id = 1") // $ source
26+
27+
var id int
28+
var name string
29+
30+
err = row.Scan(&id, &name)
31+
32+
sink(id, name) // $ hasTaintFlow="id" hasTaintFlow="name"
33+
}
34+
35+
// test querying a DB
36+
func testDBQuery(db *sql.DB) {
37+
example, err := db.Query("SELECT * FROM users") // $ source
38+
ignore(example)
39+
40+
rows, err := db.QueryContext(nil, "SELECT * FROM users") // $ source
41+
42+
if err != nil {
43+
return
44+
}
45+
46+
defer rows.Close()
47+
48+
for rows.Next() {
49+
var id int
50+
var name string
51+
err = rows.Scan(&id, &name)
52+
53+
sink(id, name) // $ hasTaintFlow="id" hasTaintFlow="name"
54+
}
55+
56+
row := db.QueryRowContext(nil, "SELECT * FROM users WHERE id = 1") // $ source
57+
58+
var id int
59+
var name string
60+
61+
err = row.Scan(&id, &name)
62+
63+
sink(id, name) // $ hasTaintFlow="id" hasTaintFlow="name"
64+
65+
dog := db.QueryRow("SELECT * FROM dogs WHERE id = 1") // $ source
66+
ignore(dog)
67+
}
68+
69+
// test querying a Stmt
70+
func testStmtQuery(stmt *sql.Stmt) {
71+
example, err := stmt.Query("SELECT * FROM users") // $ source
72+
ignore(example)
73+
74+
rows, err := stmt.QueryContext(nil, "SELECT * FROM users") // $ source
75+
76+
if err != nil {
77+
return
78+
}
79+
80+
defer rows.Close()
81+
82+
for rows.Next() {
83+
var id int
84+
var name string
85+
err = rows.Scan(&id, &name)
86+
87+
sink(id, name) // $ hasTaintFlow="id" hasTaintFlow="name"
88+
}
89+
90+
row := stmt.QueryRowContext(nil, "SELECT * FROM users WHERE id = 1") // $ source
91+
92+
var id int
93+
var name string
94+
95+
err = row.Scan(&id, &name)
96+
97+
sink(id, name) // $ hasTaintFlow="id" hasTaintFlow="name"
98+
99+
dog := stmt.QueryRow("SELECT * FROM dogs WHERE id = 1") // $ source
100+
ignore(dog)
101+
}
102+
103+
// test querying a Tx
104+
func testTxQuery(tx *sql.Tx) {
105+
example, err := tx.Query("SELECT * FROM users") // $ source
106+
ignore(example)
107+
108+
rows, err := tx.QueryContext(nil, "SELECT * FROM users") // $ source
109+
if err != nil {
110+
return
111+
}
112+
113+
defer rows.Close()
114+
115+
for rows.Next() {
116+
var id int
117+
var name string
118+
err = rows.Scan(&id, &name)
119+
120+
sink(id, name) // $ hasTaintFlow="id" hasTaintFlow="name"
121+
}
122+
123+
row := tx.QueryRowContext(nil, "SELECT * FROM users WHERE id = 1") // $ source
124+
125+
var id int
126+
var name string
127+
128+
err = row.Scan(&id, &name)
129+
130+
sink(id, name) // $ hasTaintFlow="id" hasTaintFlow="name"
131+
132+
dog := tx.QueryRow("SELECT * FROM dogs WHERE id = 1") // $ source
133+
ignore(dog)
134+
}

0 commit comments

Comments
 (0)