Skip to content

Commit 177f0c7

Browse files
committed
Prevent out of bound errors from commit-time failures
1 parent 94b7170 commit 177f0c7

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

src/connection.js

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ function Connection(options, queues = {}, { onopen = noop, onend = noop, onclose
7878

7979
let socket = null
8080
, cancelMessage
81+
, errorResponse = null
8182
, result = new Result()
8283
, incoming = Buffer.alloc(0)
8384
, needsTypes = options.fetch_types
@@ -532,8 +533,21 @@ function Connection(options, queues = {}, { onopen = noop, onend = noop, onclose
532533
}
533534

534535
function ReadyForQuery(x) {
535-
query && query.options.simple && query.resolve(results || result)
536-
query = results = null
536+
if (query) {
537+
if (errorResponse) {
538+
query.retried
539+
? errored(query.retried)
540+
: query.prepared && retryRoutines.has(errorResponse.routine)
541+
? retry(query, errorResponse)
542+
: errored(errorResponse)
543+
} else {
544+
query.resolve(results || result)
545+
}
546+
} else if (errorResponse) {
547+
errored(errorResponse)
548+
}
549+
550+
query = results = errorResponse = null
537551
result = new Result()
538552
connectTimer.cancel()
539553

@@ -598,8 +612,6 @@ function Connection(options, queues = {}, { onopen = noop, onend = noop, onclose
598612
result.count && query.cursorFn(result)
599613
write(Sync)
600614
}
601-
602-
query.resolve(result)
603615
}
604616

605617
function ParseComplete() {
@@ -798,13 +810,12 @@ function Connection(options, queues = {}, { onopen = noop, onend = noop, onclose
798810
}
799811

800812
function ErrorResponse(x) {
801-
query && (query.cursorFn || query.describeFirst) && write(Sync)
802-
const error = Errors.postgres(parseError(x))
803-
query && query.retried
804-
? errored(query.retried)
805-
: query && query.prepared && retryRoutines.has(error.routine)
806-
? retry(query, error)
807-
: errored(error)
813+
if (query) {
814+
(query.cursorFn || query.describeFirst) && write(Sync)
815+
errorResponse = Errors.postgres(parseError(x))
816+
} else {
817+
errored(Errors.postgres(parseError(x)))
818+
}
808819
}
809820

810821
function retry(q, error) {

0 commit comments

Comments
 (0)