Fix segfault in db_mysql fastRows (#5605)
This commit is contained in:
parent
1268ca79e5
commit
481d8ba24a
1 changed files with 20 additions and 4 deletions
|
|
@ -173,17 +173,33 @@ iterator fastRows*(db: DbConn, query: SqlQuery,
|
||||||
rawExec(db, query, args)
|
rawExec(db, query, args)
|
||||||
var sqlres = mysql.useResult(db)
|
var sqlres = mysql.useResult(db)
|
||||||
if sqlres != nil:
|
if sqlres != nil:
|
||||||
var L = int(mysql.numFields(sqlres))
|
var
|
||||||
var result = newRow(L)
|
L = int(mysql.numFields(sqlres))
|
||||||
var row: cstringArray
|
row: cstringArray
|
||||||
|
result: Row
|
||||||
|
backup: Row
|
||||||
|
newSeq(result, L)
|
||||||
while true:
|
while true:
|
||||||
row = mysql.fetchRow(sqlres)
|
row = mysql.fetchRow(sqlres)
|
||||||
if row == nil: break
|
if row == nil: break
|
||||||
for i in 0..L-1:
|
for i in 0..L-1:
|
||||||
setLen(result[i], 0)
|
|
||||||
if row[i] == nil:
|
if row[i] == nil:
|
||||||
|
if backup == nil:
|
||||||
|
newSeq(backup, L)
|
||||||
|
if backup[i] == nil and result[i] != nil:
|
||||||
|
shallowCopy(backup[i], result[i])
|
||||||
result[i] = nil
|
result[i] = nil
|
||||||
else:
|
else:
|
||||||
|
if result[i] == nil:
|
||||||
|
if backup != nil:
|
||||||
|
if backup[i] == nil:
|
||||||
|
backup[i] = ""
|
||||||
|
shallowCopy(result[i], backup[i])
|
||||||
|
setLen(result[i], 0)
|
||||||
|
else:
|
||||||
|
result[i] = ""
|
||||||
|
else:
|
||||||
|
setLen(result[i], 0)
|
||||||
add(result[i], row[i])
|
add(result[i], row[i])
|
||||||
yield result
|
yield result
|
||||||
properFreeResult(sqlres, row)
|
properFreeResult(sqlres, row)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue