Fix segfault in db_mysql fastRows (#5605)

This commit is contained in:
pgkos
2017-03-26 09:42:15 +02:00
committed by ringabout
parent 14c0c64c59
commit 4b4613fc57

View File

@@ -173,17 +173,33 @@ iterator fastRows*(db: DbConn, query: SqlQuery,
rawExec(db, query, args)
var sqlres = mysql.useResult(db)
if sqlres != nil:
var L = int(mysql.numFields(sqlres))
var result = newRow(L)
var row: cstringArray
var
L = int(mysql.numFields(sqlres))
row: cstringArray
result: Row
backup: Row
newSeq(result, L)
while true:
row = mysql.fetchRow(sqlres)
if row == nil: break
for i in 0..L-1:
setLen(result[i], 0)
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
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])
yield result
properFreeResult(sqlres, row)