From 884c811a628ed1714282f506328a7cbd9e0fd9a1 Mon Sep 17 00:00:00 2001 From: Prince Jain Date: Thu, 22 Oct 2026 22:05:04 +0530 Subject: [PATCH] fix(pg-protocol): expose severity field V as severityNonLocalized MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The V field holds the never-localized severity, while S is translated per lc_messages. The parser already read V into the field map but kept only S, so on a localized server nothing on the error object carried a severity a client could compare (a Russian FATAL arrives as "ВАЖНО"). Errors and notices now expose it beside severity. Fixes #3827 --- packages/pg-protocol/src/inbound-parser.test.ts | 5 +++++ packages/pg-protocol/src/messages.ts | 3 +++ packages/pg-protocol/src/parser.ts | 1 + 3 files changed, 9 insertions(+) diff --git a/packages/pg-protocol/src/inbound-parser.test.ts b/packages/pg-protocol/src/inbound-parser.test.ts index 8687194c3..2f1e81508 100644 --- a/packages/pg-protocol/src/inbound-parser.test.ts +++ b/packages/pg-protocol/src/inbound-parser.test.ts @@ -336,6 +336,10 @@ describe('PgPacketStream', function () { type: 'S', value: 'ERROR', }, + { + type: 'V', + value: 'UNLOCALIZED_ERROR', + }, { type: 'C', value: 'code', @@ -389,6 +393,7 @@ describe('PgPacketStream', function () { testForMessage(buffer, { name: 'error', severity: 'ERROR', + severityNonLocalized: 'UNLOCALIZED_ERROR', code: 'code', message: 'message', detail: 'details', diff --git a/packages/pg-protocol/src/messages.ts b/packages/pg-protocol/src/messages.ts index c3fbbdd9b..61c350984 100644 --- a/packages/pg-protocol/src/messages.ts +++ b/packages/pg-protocol/src/messages.ts @@ -77,6 +77,7 @@ export const copyDone: BackendMessage = { interface NoticeOrError { message: string | undefined severity: string | undefined + severityNonLocalized: string | undefined code: string | undefined detail: string | undefined hint: string | undefined @@ -96,6 +97,7 @@ interface NoticeOrError { export class DatabaseError extends Error implements NoticeOrError { public severity: string | undefined + public severityNonLocalized: string | undefined public code: string | undefined public detail: string | undefined public hint: string | undefined @@ -244,6 +246,7 @@ export class NoticeMessage implements BackendMessage, NoticeOrError { ) {} public readonly name = 'notice' public severity: string | undefined + public severityNonLocalized: string | undefined public code: string | undefined public detail: string | undefined public hint: string | undefined diff --git a/packages/pg-protocol/src/parser.ts b/packages/pg-protocol/src/parser.ts index df48ca4a1..5712d1f8f 100644 --- a/packages/pg-protocol/src/parser.ts +++ b/packages/pg-protocol/src/parser.ts @@ -395,6 +395,7 @@ const parseErrorMessage = (reader: BufferReader, name: MessageName) => { : new DatabaseError(messageValue, LATEINIT_LENGTH, name) message.severity = fields.S + message.severityNonLocalized = fields.V message.code = fields.C message.detail = fields.D message.hint = fields.H