Looks like a simple test coverage issue. Simple query with a comment only, get a panic.
~/repos/otoolep-go-sqlite3/src/github.com/otoolep/go-sqlite3 (query-comment-panic)$ git diff
diff --git a/sqlite3_test.go b/sqlite3_test.go
index 852aa10..efc594b 100644
--- a/sqlite3_test.go
+++ b/sqlite3_test.go
@@ -2063,6 +2063,11 @@ func TestNamedParamClearBindings(t *testing.T) {
if z.Valid {
t.Errorf("Expected z to be NULL, got %d", z.Int64)
}
+
+ _ = db.QueryRow("---- comment")
}
var customFunctionOnce sync.Once
~/repos/otoolep-go-sqlite3/src/github.com/otoolep/go-sqlite3 (query-comment-panic)$ go test -run TestNamedParamClearBindings
SIGSEGV: segmentation violation
PC=0x5c7831 m=0 sigcode=1 addr=0x0
signal arrived during cgo execution
goroutine 7 gp=0xc82dc3383c0 m=0 mp=0x8e72e0 [syscall]:
runtime.cgocall(0x5bbb60, 0xc82dc35f5c0)
/home/philip/.gvm/gos/go1.26.1/src/runtime/cgocall.go:167 +0x4b fp=0xc82dc35f598 sp=0xc82dc35f560 pc=0x48d10b
github.com/mattn/go-sqlite3._Cfunc__sqlite3_reset_clear(0x0)
_cgo_gotypes.go:401 +0x45 fp=0xc82dc35f5c0 sp=0xc82dc35f598 pc=0x592665
github.com/mattn/go-sqlite3.(*SQLiteStmt).bind.func1(...)
/home/philip/repos/otoolep-go-sqlite3/src/github.com/otoolep/go-sqlite3/sqlite3.go:2242
github.com/mattn/go-sqlite3.(*SQLiteStmt).bind(0xc82dc3522d0, {0x0, 0x0, 0xc8200000000?})
/home/philip/repos/otoolep-go-sqlite3/src/github.com/otoolep/go-sqlite3/sqlite3.go:2242 +0x65 fp=0xc82dc35f680 sp=0xc82dc35f5c0 pc=0x5a4845
github.com/mattn/go-sqlite3.(*SQLiteStmt).query(0xc82dc3522d0, {0x70c508, 0x906740}, {0x0?, 0xc?, 0x6ec3e0?})
/home/philip/repos/otoolep-go-sqlite3/src/github.com/otoolep/go-sqlite3/sqlite3.go:2294 +0x34 fp=0xc82dc35f6d0 sp=0xc82dc35f680 pc=0x5a4c94
github.com/mattn/go-sqlite3.(*SQLiteConn).query(0xc82dc2fe2a0, {0x70c508, 0x906740}, {0x6f3e20?, 0x48d59a?}, {0x906740, 0x0, 0x0})
/home/philip/repos/otoolep-go-sqlite3/src/github.com/otoolep/go-sqlite3/sqlite3.go:1027 +0x148 fp=0xc82dc35f788 sp=0xc82dc35f6d0 pc=0x59c508
github.com/mattn/go-sqlite3.(*SQLiteConn).QueryContext(0x4c8ce7?, {0x70c508?, 0x906740?}, {0x6f3e20?, 0x6bc420?}, {0x906740?, 0x6ac801?, 0x714cd0?})
/home/philip/repos/otoolep-go-sqlite3/src/github.com/otoolep/go-sqlite3/sqlite3_sql.go:27 +0x27 fp=0xc82dc35f7d8 sp=0xc82dc35f788 pc=0x56f967
database/sql.ctxDriverQuery({0x70c508?, 0x906740?}, {0x7ffb901f1ce0?, 0xc82dc2fe2a0?}, {0x0?, 0x0?}, {0x6f3e20?, 0x4f29b0?}, {0x906740, 0x0, ...})
/home/philip/.gvm/gos/go1.26.1/src/database/sql/ctxutil.go:48 +0xd7 fp=0xc82dc35f860 sp=0xc82dc35f7d8 pc=0x55a237
database/sql.(*DB).queryDC.func1()
/home/philip/.gvm/gos/go1.26.1/src/database/sql/sql.go:1786 +0x15c fp=0xc82dc35f920 sp=0xc82dc35f860 pc=0x561a1c
database/sql.withLock({0x70c198, 0xc82dc356100}, 0xc82dc35fa80)
/home/philip/.gvm/gos/go1.26.1/src/database/sql/sql.go:3572 +0x71 fp=0xc82dc35f960 sp=0xc82dc35f920 pc=0x566db1
database/sql.(*DB).queryDC(0xc82dc35fb01?, {0x70c508, 0x906740}, {0x0, 0x0}, 0xc82dc356100, 0xc82dc2b6990, {0x6f3e20, 0xc}, {0x0, ...})
/home/philip/.gvm/gos/go1.26.1/src/database/sql/sql.go:1781 +0x1b7 fp=0xc82dc35fb10 sp=0xc82dc35f960 pc=0x561257
database/sql.(*DB).query(0xc82dc3364e0, {0x70c508, 0x906740}, {0x6f3e20, 0xc}, {0x0, 0x0, 0x0}, 0xe0?)
/home/philip/.gvm/gos/go1.26.1/src/database/sql/sql.go:1764 +0xfc fp=0xc82dc35fb88 sp=0xc82dc35fb10 pc=0x56101c
database/sql.(*DB).QueryContext.func1(0xb8?)
/home/philip/.gvm/gos/go1.26.1/src/database/sql/sql.go:1742 +0x4f fp=0xc82dc35fbf0 sp=0xc82dc35fb88 pc=0x560eaf
database/sql.(*DB).retry(0x0?, 0xc82dc35fc60)
/home/philip/.gvm/gos/go1.26.1/src/database/sql/sql.go:1576 +0x42 fp=0xc82dc35fc38 sp=0xc82dc35fbf0 pc=0x55f8a2
database/sql.(*DB).QueryContext(0xc82dc35fe58?, {0x70c508?, 0x906740?}, {0x6f3e20?, 0x3?}, {0x0?, 0x0?, 0xc82dc35fe58?})
/home/philip/.gvm/gos/go1.26.1/src/database/sql/sql.go:1741 +0x98 fp=0xc82dc35fcc8 sp=0xc82dc35fc38 pc=0x560dd8
database/sql.(*DB).QueryRowContext(...)
/home/philip/.gvm/gos/go1.26.1/src/database/sql/sql.go:1842
database/sql.(*DB).QueryRow(0xc82dc2983f0?, {0x6f3e20?, 0x906740?}, {0x0?, 0x8ccae0?, 0xc82dc35ff08?})
/home/philip/.gvm/gos/go1.26.1/src/database/sql/sql.go:1856 +0x45 fp=0xc82dc35fd30 sp=0xc82dc35fcc8 pc=0x561ae5
github.com/mattn/go-sqlite3.TestNamedParamClearBindings(0xc82dc368248)
/home/philip/repos/otoolep-go-sqlite3/src/github.com/otoolep/go-sqlite3/sqlite3_test.go:2067 +0x74f fp=0xc82dc35ff70 sp=0xc82dc35fd30 pc=0x58d80f
testing.tRunner(0xc82dc368248, 0x707a30)
/home/philip/.gvm/gos/go1.26.1/src/testing/testing.go:2036 +0xea fp=0xc82dc35ffc0 sp=0xc82dc35ff70 pc=0x51088a
testing.(*T).Run.gowrap1()
/home/philip/.gvm/gos/go1.26.1/src/testing/testing.go:2101 +0x1b fp=0xc82dc35ffe0 sp=0xc82dc35ffc0 pc=0x511a1b
runtime.goexit({})
/home/philip/.gvm/gos/go1.26.1/src/runtime/asm_amd64.s:1771 +0x1 fp=0xc82dc35ffe8 sp=0xc82dc35ffe0 pc=0x496aa1
created by testing.(*T).Run in goroutine 1
/home/philip/.gvm/gos/go1.26.1/src/testing/testing.go:2101 +0x4c5
goroutine 1 gp=0xc82dc28a1e0 m=nil [chan receive]:
runtime.gopark(0x300fbd6c5e108?, 0x300fbd6c674c0?, 0xc0?, 0x74?, 0x7ffbd6c5e108?)
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:462 +0xce fp=0xc82dc35d998 sp=0xc82dc35d978 pc=0x48f94e
runtime.chanrecv(0xc82dc2ae380, 0xc82dc35da7f, 0x1)
/home/philip/.gvm/gos/go1.26.1/src/runtime/chan.go:667 +0x4ae fp=0xc82dc35da10 sp=0xc82dc35d998 pc=0x4214ce
runtime.chanrecv1(0x8e5c20?, 0x714380?)
/home/philip/.gvm/gos/go1.26.1/src/runtime/chan.go:509 +0x12 fp=0xc82dc35da38 sp=0xc82dc35da10 pc=0x421012
testing.(*T).Run(0xc82dc368008, {0x6f9e69?, 0xc82dc35db30?}, 0x707a30)
/home/philip/.gvm/gos/go1.26.1/src/testing/testing.go:2109 +0x4e5 fp=0xc82dc35db10 sp=0xc82dc35da38 pc=0x5118a5
testing.runTests.func1(0xc82dc368008)
/home/philip/.gvm/gos/go1.26.1/src/testing/testing.go:2585 +0x37 fp=0xc82dc35db50 sp=0xc82dc35db10 pc=0x513c97
testing.tRunner(0xc82dc368008, 0xc82dc35dc58)
/home/philip/.gvm/gos/go1.26.1/src/testing/testing.go:2036 +0xea fp=0xc82dc35dba0 sp=0xc82dc35db50 pc=0x51088a
testing.runTests({0x6f9e84, 0x1b}, {0x6f9e84, 0x1b}, 0xc82dc298378, {0x8c6700, 0x45, 0x45}, {0xc27474ee250f2555, 0x8bb2cdb5e7, ...})
/home/philip/.gvm/gos/go1.26.1/src/testing/testing.go:2583 +0x505 fp=0xc82dc35dc88 sp=0xc82dc35dba0 pc=0x513b65
testing.(*M).Run(0xc82dc326a00)
/home/philip/.gvm/gos/go1.26.1/src/testing/testing.go:2443 +0x6ac fp=0xc82dc35dec8 sp=0xc82dc35dc88 pc=0x51250c
main.main()
_testmain.go:186 +0x9b fp=0xc82dc35df48 sp=0xc82dc35dec8 pc=0x5a9f3b
runtime.main()
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:290 +0x2d5 fp=0xc82dc35dfe0 sp=0xc82dc35df48 pc=0x45a195
runtime.goexit({})
/home/philip/.gvm/gos/go1.26.1/src/runtime/asm_amd64.s:1771 +0x1 fp=0xc82dc35dfe8 sp=0xc82dc35dfe0 pc=0x496aa1
goroutine 2 gp=0xc82dc28ad20 m=nil [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:462 +0xce fp=0xc82dc2e4fa8 sp=0xc82dc2e4f88 pc=0x48f94e
runtime.goparkunlock(...)
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:468
runtime.forcegchelper()
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:375 +0xb3 fp=0xc82dc2e4fe0 sp=0xc82dc2e4fa8 pc=0x45a4b3
runtime.goexit({})
/home/philip/.gvm/gos/go1.26.1/src/runtime/asm_amd64.s:1771 +0x1 fp=0xc82dc2e4fe8 sp=0xc82dc2e4fe0 pc=0x496aa1
created by runtime.init.7 in goroutine 1
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:363 +0x1a
goroutine 3 gp=0xc82dc28b2c0 m=nil [GC sweep wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:462 +0xce fp=0xc82dc2e5788 sp=0xc82dc2e5768 pc=0x48f94e
runtime.goparkunlock(...)
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:468
runtime.bgsweep(0xc82dc2ae080)
/home/philip/.gvm/gos/go1.26.1/src/runtime/mgcsweep.go:279 +0x94 fp=0xc82dc2e57c8 sp=0xc82dc2e5788 pc=0x441d34
runtime.gcenable.gowrap1()
/home/philip/.gvm/gos/go1.26.1/src/runtime/mgc.go:214 +0x17 fp=0xc82dc2e57e0 sp=0xc82dc2e57c8 pc=0x433197
runtime.goexit({})
/home/philip/.gvm/gos/go1.26.1/src/runtime/asm_amd64.s:1771 +0x1 fp=0xc82dc2e57e8 sp=0xc82dc2e57e0 pc=0x496aa1
created by runtime.gcenable in goroutine 1
/home/philip/.gvm/gos/go1.26.1/src/runtime/mgc.go:214 +0x66
goroutine 4 gp=0xc82dc28b4a0 m=nil [GC scavenge wait]:
runtime.gopark(0xc82dc2ae080?, 0x708618?, 0x1?, 0x0?, 0xc82dc28b4a0?)
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:462 +0xce fp=0xc82dc2e5f78 sp=0xc82dc2e5f58 pc=0x48f94e
runtime.goparkunlock(...)
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:468
runtime.(*scavengerState).park(0x8e5fc0)
/home/philip/.gvm/gos/go1.26.1/src/runtime/mgcscavenge.go:425 +0x49 fp=0xc82dc2e5fa8 sp=0xc82dc2e5f78 pc=0x43f869
runtime.bgscavenge(0xc82dc2ae080)
/home/philip/.gvm/gos/go1.26.1/src/runtime/mgcscavenge.go:653 +0x3c fp=0xc82dc2e5fc8 sp=0xc82dc2e5fa8 pc=0x43fddc
runtime.gcenable.gowrap2()
/home/philip/.gvm/gos/go1.26.1/src/runtime/mgc.go:215 +0x17 fp=0xc82dc2e5fe0 sp=0xc82dc2e5fc8 pc=0x433157
runtime.goexit({})
/home/philip/.gvm/gos/go1.26.1/src/runtime/asm_amd64.s:1771 +0x1 fp=0xc82dc2e5fe8 sp=0xc82dc2e5fe0 pc=0x496aa1
created by runtime.gcenable in goroutine 1
/home/philip/.gvm/gos/go1.26.1/src/runtime/mgc.go:215 +0xa5
goroutine 5 gp=0xc82dc338000 m=nil [finalizer wait]:
runtime.gopark(0x469a95?, 0x1c8?, 0x20?, 0x0?, 0xc82dc2e4601?)
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:462 +0xce fp=0xc82dc2e4620 sp=0xc82dc2e4600 pc=0x48f94e
runtime.runFinalizers()
/home/philip/.gvm/gos/go1.26.1/src/runtime/mfinal.go:210 +0x107 fp=0xc82dc2e47e0 sp=0xc82dc2e4620 pc=0x432107
runtime.goexit({})
/home/philip/.gvm/gos/go1.26.1/src/runtime/asm_amd64.s:1771 +0x1 fp=0xc82dc2e47e8 sp=0xc82dc2e47e0 pc=0x496aa1
created by runtime.createfing in goroutine 1
/home/philip/.gvm/gos/go1.26.1/src/runtime/mfinal.go:172 +0x3d
goroutine 6 gp=0xc82dc3381e0 m=nil [cleanup wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:462 +0xce fp=0xc82dc2e6768 sp=0xc82dc2e6748 pc=0x48f94e
runtime.goparkunlock(...)
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:468
runtime.(*cleanupQueue).dequeue(0x8e61e0)
/home/philip/.gvm/gos/go1.26.1/src/runtime/mcleanup.go:522 +0xd4 fp=0xc82dc2e67a0 sp=0xc82dc2e6768 pc=0x42ef54
runtime.runCleanups()
/home/philip/.gvm/gos/go1.26.1/src/runtime/mcleanup.go:718 +0x45 fp=0xc82dc2e67e0 sp=0xc82dc2e67a0 pc=0x42f5c5
runtime.goexit({})
/home/philip/.gvm/gos/go1.26.1/src/runtime/asm_amd64.s:1771 +0x1 fp=0xc82dc2e67e8 sp=0xc82dc2e67e0 pc=0x496aa1
created by runtime.(*cleanupQueue).createGs in goroutine 1
/home/philip/.gvm/gos/go1.26.1/src/runtime/mcleanup.go:672 +0xa5
goroutine 8 gp=0xc82dc3385a0 m=nil [select]:
runtime.gopark(0xc82dc2e6f88?, 0x2?, 0x88?, 0x9c?, 0xc82dc2e6f84?)
/home/philip/.gvm/gos/go1.26.1/src/runtime/proc.go:462 +0xce fp=0xc82dc2e6e20 sp=0xc82dc2e6e00 pc=0x48f94e
runtime.selectgo(0xc82dc2e6f88, 0xc82dc2e6f80, 0xc82dc2e6fb0?, 0x0, 0xc82dc368248?, 0x1)
/home/philip/.gvm/gos/go1.26.1/src/runtime/select.go:351 +0xaa5 fp=0xc82dc2e6f50 sp=0xc82dc2e6e20 pc=0x46d865
database/sql.(*DB).connectionOpener(0xc82dc3364e0, {0x70c620, 0xc82dc352190})
/home/philip/.gvm/gos/go1.26.1/src/database/sql/sql.go:1261 +0x89 fp=0xc82dc2e6fb8 sp=0xc82dc2e6f50 pc=0x55de69
database/sql.OpenDB.gowrap1()
/home/philip/.gvm/gos/go1.26.1/src/database/sql/sql.go:841 +0x1f fp=0xc82dc2e6fe0 sp=0xc82dc2e6fb8 pc=0x55c6ff
runtime.goexit({})
/home/philip/.gvm/gos/go1.26.1/src/runtime/asm_amd64.s:1771 +0x1 fp=0xc82dc2e6fe8 sp=0xc82dc2e6fe0 pc=0x496aa1
created by database/sql.OpenDB in goroutine 7
/home/philip/.gvm/gos/go1.26.1/src/database/sql/sql.go:841 +0x130
rax 0x0
rbx 0xc82dc35f5c0
rcx 0x0
rdx 0xc82dc35f550
rdi 0x0
rsi 0x8e62e0
rbp 0x0
rsp 0x7ffe9dad4c50
r8 0x8e72e0
r9 0x0
r10 0x7ffbd6c69901
r11 0x50
r12 0x0
r13 0x0
r14 0xc82dc3383c0
r15 0xffffffffffffffff
rip 0x5c7831
rflags 0x10206
cs 0x33
fs 0x0
gs 0x0
exit status 2
FAIL github.com/mattn/go-sqlite3 0.092s
~/repos/otoolep-go-sqlite3/src/github.com/otoolep/go-sqlite3 (query-comment-panic)$
Looks like a simple test coverage issue. Simple query with a comment only, get a panic.
This was fine in earlier versions, and was exposed by rqlite unit testing after upgrading. This test started failing: https://github.com/rqlite/rqlite/blob/v10.0.0/db/db_common_test.go#L109