Fix segfault in db_mysql fastRows (#5605)

This commit is contained in:
pgkos 2017-03-26 09:42:15 +02:00 • committed by Andreas Rumpf
commit 481d8ba24a

View file

@ -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)