Skip to content

Commit e714b78

Browse files
authoredMar 27, 2025
Merge pull request #10 from supabase/fix/uncatchable-error-pg-protocol
fix(pg-protocol): uncatchable error pg protocol
2 parents d3e2426 + 93a0d23 commit e714b78

File tree

4 files changed

+55
-53
lines changed

4 files changed

+55
-53
lines changed
 

‎.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ dist
99
.DS_Store
1010
/.eslintcache
1111
.vscode/
12-
manually-test-on-heroku.js
12+
manually-test-on-heroku.js

‎packages/pg-protocol/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "pg-protocol",
3-
"version": "1.8.0",
3+
"version": "1.8.1",
44
"description": "The postgres client/server binary protocol, implemented in TypeScript",
55
"main": "dist/index.js",
66
"types": "dist/index.d.ts",

‎packages/pg-protocol/src/parser.ts

+51-49
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,11 @@ export class Parser {
7979
private bufferLength: number = 0
8080
private bufferOffset: number = 0
8181
private reader = new BufferReader()
82-
private mode: Mode
8382

8483
constructor(opts?: StreamOptions) {
8584
if (opts?.mode === 'binary') {
8685
throw new Error('Binary mode not supported yet')
8786
}
88-
this.mode = opts?.mode || 'text'
8987
}
9088

9189
public parse(buffer: Buffer, callback: MessageCallback) {
@@ -152,53 +150,57 @@ export class Parser {
152150
}
153151

154152
private handlePacket(offset: number, code: number, length: number, bytes: Buffer): BackendMessage {
155-
switch (code) {
156-
case MessageCodes.BindComplete:
157-
return bindComplete
158-
case MessageCodes.ParseComplete:
159-
return parseComplete
160-
case MessageCodes.CloseComplete:
161-
return closeComplete
162-
case MessageCodes.NoData:
163-
return noData
164-
case MessageCodes.PortalSuspended:
165-
return portalSuspended
166-
case MessageCodes.CopyDone:
167-
return copyDone
168-
case MessageCodes.ReplicationStart:
169-
return replicationStart
170-
case MessageCodes.EmptyQuery:
171-
return emptyQuery
172-
case MessageCodes.DataRow:
173-
return this.parseDataRowMessage(offset, length, bytes)
174-
case MessageCodes.CommandComplete:
175-
return this.parseCommandCompleteMessage(offset, length, bytes)
176-
case MessageCodes.ReadyForQuery:
177-
return this.parseReadyForQueryMessage(offset, length, bytes)
178-
case MessageCodes.NotificationResponse:
179-
return this.parseNotificationMessage(offset, length, bytes)
180-
case MessageCodes.AuthenticationResponse:
181-
return this.parseAuthenticationResponse(offset, length, bytes)
182-
case MessageCodes.ParameterStatus:
183-
return this.parseParameterStatusMessage(offset, length, bytes)
184-
case MessageCodes.BackendKeyData:
185-
return this.parseBackendKeyData(offset, length, bytes)
186-
case MessageCodes.ErrorMessage:
187-
return this.parseErrorMessage(offset, length, bytes, 'error')
188-
case MessageCodes.NoticeMessage:
189-
return this.parseErrorMessage(offset, length, bytes, 'notice')
190-
case MessageCodes.RowDescriptionMessage:
191-
return this.parseRowDescriptionMessage(offset, length, bytes)
192-
case MessageCodes.ParameterDescriptionMessage:
193-
return this.parseParameterDescriptionMessage(offset, length, bytes)
194-
case MessageCodes.CopyIn:
195-
return this.parseCopyInMessage(offset, length, bytes)
196-
case MessageCodes.CopyOut:
197-
return this.parseCopyOutMessage(offset, length, bytes)
198-
case MessageCodes.CopyData:
199-
return this.parseCopyData(offset, length, bytes)
200-
default:
201-
return new DatabaseError('received invalid response: ' + code.toString(16), length, 'error')
153+
try {
154+
switch (code) {
155+
case MessageCodes.BindComplete:
156+
return bindComplete
157+
case MessageCodes.ParseComplete:
158+
return parseComplete
159+
case MessageCodes.CloseComplete:
160+
return closeComplete
161+
case MessageCodes.NoData:
162+
return noData
163+
case MessageCodes.PortalSuspended:
164+
return portalSuspended
165+
case MessageCodes.CopyDone:
166+
return copyDone
167+
case MessageCodes.ReplicationStart:
168+
return replicationStart
169+
case MessageCodes.EmptyQuery:
170+
return emptyQuery
171+
case MessageCodes.DataRow:
172+
return this.parseDataRowMessage(offset, length, bytes)
173+
case MessageCodes.CommandComplete:
174+
return this.parseCommandCompleteMessage(offset, length, bytes)
175+
case MessageCodes.ReadyForQuery:
176+
return this.parseReadyForQueryMessage(offset, length, bytes)
177+
case MessageCodes.NotificationResponse:
178+
return this.parseNotificationMessage(offset, length, bytes)
179+
case MessageCodes.AuthenticationResponse:
180+
return this.parseAuthenticationResponse(offset, length, bytes)
181+
case MessageCodes.ParameterStatus:
182+
return this.parseParameterStatusMessage(offset, length, bytes)
183+
case MessageCodes.BackendKeyData:
184+
return this.parseBackendKeyData(offset, length, bytes)
185+
case MessageCodes.ErrorMessage:
186+
return this.parseErrorMessage(offset, length, bytes, 'error')
187+
case MessageCodes.NoticeMessage:
188+
return this.parseErrorMessage(offset, length, bytes, 'notice')
189+
case MessageCodes.RowDescriptionMessage:
190+
return this.parseRowDescriptionMessage(offset, length, bytes)
191+
case MessageCodes.ParameterDescriptionMessage:
192+
return this.parseParameterDescriptionMessage(offset, length, bytes)
193+
case MessageCodes.CopyIn:
194+
return this.parseCopyInMessage(offset, length, bytes)
195+
case MessageCodes.CopyOut:
196+
return this.parseCopyOutMessage(offset, length, bytes)
197+
case MessageCodes.CopyData:
198+
return this.parseCopyData(offset, length, bytes)
199+
default:
200+
return new DatabaseError('received invalid response: ' + code.toString(16), length, 'error')
201+
}
202+
} catch (error) {
203+
return new DatabaseError(`exception received while handling packet: ${error}`, length, 'error')
202204
}
203205
}
204206

‎packages/pg/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "pg",
3-
"version": "8.14.1",
3+
"version": "8.14.2",
44
"description": "PostgreSQL client - pure javascript & libpq with the same API",
55
"keywords": [
66
"database",
@@ -22,7 +22,7 @@
2222
"dependencies": {
2323
"pg-connection-string": "^2.7.0",
2424
"pg-pool": "^3.8.0",
25-
"pg-protocol": "^1.8.0",
25+
"pg-protocol": "npm:@supabase/pg-protocol@^1.8.1",
2626
"pg-types": "^2.1.0",
2727
"pgpass": "1.x"
2828
},

0 commit comments

Comments
 (0)
Please sign in to comment.