aboutsummaryrefslogtreecommitdiff
path: root/sqlite3.go
diff options
context:
space:
mode:
authorSven Engelhardt <sven@iptools.de>2011-12-02 23:32:38 +0100
committerSven Engelhardt <sven@iptools.de>2011-12-02 23:32:38 +0100
commit01566134d1cdfeb92b64df529aeccadd695cefcd (patch)
tree2f9b954893606b25c6975fc323ecf7c34a85614c /sqlite3.go
parentfix LastInsertId()/RowsAffected(). (diff)
downloadgolite-01566134d1cdfeb92b64df529aeccadd695cefcd.tar.gz
golite-01566134d1cdfeb92b64df529aeccadd695cefcd.tar.xz
allow to insert zero-length strings into database
&b[0] fails with an index out-of-bounds error for a slice with len()==0
Diffstat (limited to 'sqlite3.go')
-rw-r--r--sqlite3.go11
1 files changed, 8 insertions, 3 deletions
diff --git a/sqlite3.go b/sqlite3.go
index f879718..364e8c1 100644
--- a/sqlite3.go
+++ b/sqlite3.go
@@ -154,8 +154,13 @@ func (s *SQLiteStmt) bind(args []interface{}) error {
case nil:
rv = C.sqlite3_bind_null(s.s, n)
case string:
- b := []byte(v)
- rv = C._sqlite3_bind_text(s.s, n, (*C.char)(unsafe.Pointer(&b[0])), C.int(len(b)))
+ if len(v) == 0 {
+ b := []byte{0}
+ rv = C._sqlite3_bind_text(s.s, n, (*C.char)(unsafe.Pointer(&b[0])), C.int(0))
+ } else {
+ b := []byte(v)
+ rv = C._sqlite3_bind_text(s.s, n, (*C.char)(unsafe.Pointer(&b[0])), C.int(len(b)))
+ }
case int:
rv = C.sqlite3_bind_int(s.s, n, C.int(v))
case int64:
@@ -213,7 +218,7 @@ func (s *SQLiteStmt) Exec(args []interface{}) (driver.Result, error) {
if rv != C.SQLITE_ROW && rv != C.SQLITE_OK && rv != C.SQLITE_DONE {
return nil, errors.New(C.GoString(C.sqlite3_errmsg(s.c.db)))
}
- return &SQLiteResult {s}, nil
+ return &SQLiteResult{s}, nil
}
type SQLiteRows struct {