From 49b3582977eb9990b49f112d9c4453f5fe0f7634 Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Tue, 15 Mar 2016 19:20:03 -0500 Subject: [PATCH] Fix connection corruption when errored query closes early refs #125 --- CHANGELOG.md | 1 + query.go | 5 +++++ query_test.go | 15 +++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3202516d..22991fe7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * Fix unrecognized commit failure * Fix msgReader.rxMsg bug when msgReader already has error * Go float64 can no longer be encoded to a PostgreSQL float4 +* Fix connection corruption when query with error is closed early ## Features diff --git a/query.go b/query.go index a60043cd..a40d17b2 100644 --- a/query.go +++ b/query.go @@ -101,6 +101,11 @@ func (rows *Rows) readUntilReadyForQuery() { case dataRow: case commandComplete: case bindComplete: + case errorResponse: + err = rows.conn.rxErrorResponse(r) + if rows.err == nil { + rows.err = err + } default: err = rows.conn.processContextFreeMsg(t, r) if err != nil { diff --git a/query_test.go b/query_test.go index 6ba44f50..bb7d793c 100644 --- a/query_test.go +++ b/query_test.go @@ -135,6 +135,21 @@ func TestConnQueryCloseEarly(t *testing.T) { ensureConnValid(t, conn) } +func TestConnQueryCloseEarlyWithErrorOnWire(t *testing.T) { + t.Parallel() + + conn := mustConnect(t, *defaultConnConfig) + defer closeConn(t, conn) + + rows, err := conn.Query("select 1/0") + if err != nil { + t.Fatalf("conn.Query failed: %v", err) + } + rows.Close() + + ensureConnValid(t, conn) +} + // Test that a connection stays valid when query results read incorrectly func TestConnQueryReadWrongTypeError(t *testing.T) { t.Parallel()