lib / pq

Pure Go Postgres driver for database/sql
https://pkg.go.dev/github.com/lib/pq
MIT License
8.86k stars 908 forks source link

Ping no longer works - closing nil rows upon failed transaction #1096

Open jimmymackw opened 1 year ago

jimmymackw commented 1 year ago

Refer to conn_go18.go#L94 There was an update to the simpleQuery call as part of Ping during a failed tx. see commit. image

On line 98 rows.Close() is called though rows is nil causing a panic.

See example logs below.

Nov  9 09:55:43 ip-10-90-33-200: panic: runtime error: invalid memory address or nil pointer dereference
Nov  9 09:55:43 ip-10-90-33-200: [signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x738f7f]
Nov  9 09:55:43 ip-10-90-33-200: goroutine 20 [running]:
Nov  9 09:55:43 ip-10-90-33-200: github.com/lib/pq.(*rows).Close(0x0, 0x0, 0x0)
Nov  9 09:55:43 ip-10-90-33-200: #011/go/pkg/mod/github.com/lib/pq@v1.9.0/conn.go:1494 +0x3f
Nov  9 09:55:43 ip-10-90-33-200: github.com/lib/pq.(*conn).Ping(0xc000116b00, 0x9b8880, 0xc00009a000, 0x0, 0x0)
Nov  9 09:55:43 ip-10-90-33-200: #011/go/pkg/mod/github.com/lib/pq@v1.9.0/conn_go18.go:87 +0xf6
Nov  9 09:55:43 ip-10-90-33-200: database/sql.(*DB).pingDC.func1()
Nov  9 09:55:43 ip-10-90-33-200: #011/usr/local/go/src/database/sql/sql.go:785 +0x4a
Nov  9 09:55:43 ip-10-90-33-200: database/sql.withLock(0x9b3640, 0xc0001fe2d0, 0xc00033e5e8)
Nov  9 09:55:43 ip-10-90-33-200: #011/usr/local/go/src/database/sql/sql.go:3284 +0x69
Nov  9 09:55:43 ip-10-90-33-200: database/sql.(*DB).pingDC(0xc0001584e0, 0x9b8880, 0xc00009a000, 0xc0001fe2d0, 0xc00033e698, 0x0, 0x0)
Nov  9 09:55:43 ip-10-90-33-200: #011/usr/local/go/src/database/sql/sql.go:784 +0x11b
Nov  9 09:55:43 ip-10-90-33-200: database/sql.(*DB).PingContext(0xc0001584e0, 0x9b8880, 0xc00009a000, 0x6, 0xc000097680)
Nov  9 09:55:43 ip-10-90-33-200: #011/usr/local/go/src/database/sql/sql.go:811 +0x170
Nov  9 09:55:43 ip-10-90-33-200: database/sql.(*DB).Ping(...)
Nov  9 09:55:43 ip-10-90-33-200: #011/usr/local/go/src/database/sql/sql.go:817
Nov  9 09:55:43 ip-10-90-33-200: tops_data_processor/db_manager.GetDB(0xc0005fcfba, 0x6, 0x0, 0xc000186900, 0x15)
Nov  9 09:55:43 ip-10-90-33-200: #011/go/src/tops_data_processor/db_manager/db_manager.go:154 +0x427
Nov  9 09:55:43 ip-10-90-33-200: main.TableUpdateConfig.Execute(0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0xc000083800, 0x12, ...)
Nov  9 09:55:43 ip-10-90-33-200: #011/go/src/tops_data_processor/load.go:360 +0xb3a
Nov  9 09:55:43 ip-10-90-33-200: main.(*Worker).Start.func1(0xc0000950b0)
Nov  9 09:55:43 ip-10-90-33-200: #011/go/src/tops_data_processor/worker.go:88 +0xd9
Nov  9 09:55:43 ip-10-90-33-200: created by main.(*Worker).Start
Nov  9 09:55:43 ip-10-90-33-200: #011/go/src/tops_data_processor/worker.go:68 +0x3f