mirror of
https://github.com/vlang/v.git
synced 2025-08-04 02:07:28 -04:00
db.mysql: fix invalid memory access in exec_one for returned rows with NULL fields (#21317)
This commit is contained in:
parent
e235641c29
commit
2192d9b1e5
@ -323,7 +323,7 @@ pub fn (db &DB) exec_one(query string) !Row {
|
|||||||
|
|
||||||
mut row := Row{}
|
mut row := Row{}
|
||||||
for i in 0 .. num_cols {
|
for i in 0 .. num_cols {
|
||||||
if unsafe { row_vals == &u8(0) } {
|
if unsafe { row_vals == &u8(0) } || unsafe { row_vals[i] == nil } {
|
||||||
row.vals << ''
|
row.vals << ''
|
||||||
} else {
|
} else {
|
||||||
row.vals << mystring(unsafe { &u8(row_vals[i]) })
|
row.vals << mystring(unsafe { &u8(row_vals[i]) })
|
||||||
|
@ -16,7 +16,8 @@ fn test_mysql() {
|
|||||||
|
|
||||||
response = db.exec('create table if not exists users (
|
response = db.exec('create table if not exists users (
|
||||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||||
username TEXT
|
username TEXT,
|
||||||
|
last_name TEXT NULL DEFAULT NULL
|
||||||
)')!
|
)')!
|
||||||
assert response == []mysql.Row{}
|
assert response == []mysql.Row{}
|
||||||
|
|
||||||
@ -48,36 +49,36 @@ fn test_mysql() {
|
|||||||
'jackson',
|
'jackson',
|
||||||
])!
|
])!
|
||||||
assert response[0] == mysql.Row{
|
assert response[0] == mysql.Row{
|
||||||
vals: ['1', 'jackson']
|
vals: ['1', 'jackson', '']
|
||||||
}
|
}
|
||||||
|
|
||||||
response = db.exec_param_many('select * from users where username = ? and id = ?',
|
response = db.exec_param_many('select * from users where username = ? and id = ?',
|
||||||
['bailey', '3'])!
|
['bailey', '3'])!
|
||||||
assert response[0] == mysql.Row{
|
assert response[0] == mysql.Row{
|
||||||
vals: ['3', 'bailey']
|
vals: ['3', 'bailey', '']
|
||||||
}
|
}
|
||||||
|
|
||||||
response = db.exec_param_many('select * from users', [''])!
|
response = db.exec_param_many('select * from users', [''])!
|
||||||
assert response == [
|
assert response == [
|
||||||
mysql.Row{
|
mysql.Row{
|
||||||
vals: ['1', 'jackson']
|
vals: ['1', 'jackson', '']
|
||||||
},
|
},
|
||||||
mysql.Row{
|
mysql.Row{
|
||||||
vals: ['2', 'shannon']
|
vals: ['2', 'shannon', '']
|
||||||
},
|
},
|
||||||
mysql.Row{
|
mysql.Row{
|
||||||
vals: ['3', 'bailey']
|
vals: ['3', 'bailey', '']
|
||||||
},
|
},
|
||||||
mysql.Row{
|
mysql.Row{
|
||||||
vals: ['4', 'blaze']
|
vals: ['4', 'blaze', '']
|
||||||
},
|
},
|
||||||
mysql.Row{
|
mysql.Row{
|
||||||
vals: ['5', 'Hi']
|
vals: ['5', 'Hi', '']
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
response = db.exec_param('select * from users where username = ?', 'blaze')!
|
response = db.exec_param('select * from users where username = ?', 'blaze')!
|
||||||
assert response[0] == mysql.Row{
|
assert response[0] == mysql.Row{
|
||||||
vals: ['4', 'blaze']
|
vals: ['4', 'blaze', '']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user