Skip to content

Segmentation violation when querying with just a comment #1390

@otoolep

Description

@otoolep

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

~/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)$ 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions