From a4e5e7a617347421764703979ebf8b78320ad3e4 Mon Sep 17 00:00:00 2001 From: Thomas Leske Date: Mon, 20 Aug 2012 17:20:58 +0200 Subject: [PATCH] bug fix: Byte slices belong to the caller and so must be copies. With the exeption of slices in the result type sql.RawBytes, new calls to Sqlite must not corrupt slices. --- sqlite3.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sqlite3.go b/sqlite3.go index 161da5e..d3afff5 100644 --- a/sqlite3.go +++ b/sqlite3.go @@ -297,7 +297,14 @@ func (rc *SQLiteRows) Next(dest []driver.Value) error { case C.SQLITE_BLOB: n := int(C.sqlite3_column_bytes(rc.s.s, C.int(i))) p := C.sqlite3_column_blob(rc.s.s, C.int(i)) - dest[i] = (*[1 << 30]byte)(unsafe.Pointer(p))[0:n] + switch dest[i].(type) { + case sql.RawBytes: + dest[i] = (*[1 << 30]byte)(unsafe.Pointer(p))[0:n] + default: + slice := make([]byte, n) + copy(slice[:], (*[1 << 30]byte)(unsafe.Pointer(p))[0:n]) + dest[i] = slice + } case C.SQLITE_NULL: dest[i] = nil case C.SQLITE_TEXT: