From c8187263547186089e747be5777fa56d2d8311d3 Mon Sep 17 00:00:00 2001 From: Tim Perry Date: Tue, 15 Jun 2021 11:53:16 +0200 Subject: [PATCH] Change 'invalid data payload' error code to 'unsupported message' It's not technically invalid - the standard does not disallow the length that's used - it's just that this specific endpoint won't accept it. It's also not necessarily a single data payload - the total length might come from a series of separate data frames comprising a single message. --- doc/ws.md | 13 ++++++++----- lib/permessage-deflate.js | 2 +- lib/receiver.js | 6 +++--- test/receiver.test.js | 8 ++++---- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/doc/ws.md b/doc/ws.md index 08c483072..118e4d55c 100644 --- a/doc/ws.md +++ b/doc/ws.md @@ -45,7 +45,7 @@ - [websocket.url](#websocketurl) - [WebSocket.createWebSocketStream(websocket[, options])](#websocketcreatewebsocketstreamwebsocket-options) - [WS Error Codes](#ws-error-codes) - - [WS_ERR_INVALID_DATA_PAYLOAD_LENGTH](#wserrinvaliddatapayloadlength) + - [WS_ERR_UNSUPPORTED_MESSAGE_LENGTH](#wserrunsupporteddatapayloadlength) - [WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH](#wserrinvalidcontrolpayloadlength) - [WS_ERR_INVALID_UTF8](#wserrinvalidutf8) - [WS_ERR_INVALID_OPCODE](#wserrinvalidopcode) @@ -309,7 +309,8 @@ human-readable string explaining why the connection has been closed. - `error` {Error} -Emitted when an error occurs. Errors may have a `.code` property, matching one of the string values defined below under [WS Error Codes](#ws-error-codes). +Emitted when an error occurs. Errors may have a `.code` property, matching one +of the string values defined below under [WS Error Codes](#ws-error-codes). ### Event: 'message' @@ -506,11 +507,13 @@ given `WebSocket`. ## WS Error Codes -Errors emitted by the websocket may have a `.code` property, describing the specific type of error that has occurred: +Errors emitted by the websocket may have a `.code` property, describing the +specific type of error that has occurred: -### WS_ERR_INVALID_DATA_PAYLOAD_LENGTH +### WS_ERR_UNSUPPORTED_MESSAGE_LENGTH -A data frame with an unexpectedly long payload was received. +A message was received with a length longer than the maximum supported length +for this endpoint. ### WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH diff --git a/lib/permessage-deflate.js b/lib/permessage-deflate.js index 8229280f1..ce9178429 100644 --- a/lib/permessage-deflate.js +++ b/lib/permessage-deflate.js @@ -495,7 +495,7 @@ function inflateOnData(chunk) { } this[kError] = new RangeError('Max payload size exceeded'); - this[kError].code = 'WS_ERR_INVALID_DATA_PAYLOAD_LENGTH'; + this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'; this[kError][kStatusCode] = 1009; this.removeListener('data', inflateOnData); this.reset(); diff --git a/lib/receiver.js b/lib/receiver.js index 848a52561..e32676b1e 100644 --- a/lib/receiver.js +++ b/lib/receiver.js @@ -347,7 +347,7 @@ class Receiver extends Writable { 'Unsupported WebSocket frame: payload length > 2^53 - 1', false, 1009, - 'WS_ERR_INVALID_DATA_PAYLOAD_LENGTH' + 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH' ); } @@ -371,7 +371,7 @@ class Receiver extends Writable { 'Max payload size exceeded', false, 1009, - 'WS_ERR_INVALID_DATA_PAYLOAD_LENGTH' + 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH' ); } } @@ -457,7 +457,7 @@ class Receiver extends Writable { 'Max payload size exceeded', false, 1009, - 'WS_ERR_INVALID_DATA_PAYLOAD_LENGTH' + 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH' ) ); } diff --git a/test/receiver.test.js b/test/receiver.test.js index 54f32b04b..07fded28a 100644 --- a/test/receiver.test.js +++ b/test/receiver.test.js @@ -748,7 +748,7 @@ describe('Receiver', () => { receiver.on('error', (err) => { assert.ok(err instanceof RangeError); - assert.strictEqual(err.code, 'WS_ERR_INVALID_DATA_PAYLOAD_LENGTH'); + assert.strictEqual(err.code, 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'); assert.strictEqual( err.message, 'Unsupported WebSocket frame: payload length > 2^53 - 1' @@ -879,7 +879,7 @@ describe('Receiver', () => { receiver.on('error', (err) => { assert.ok(err instanceof RangeError); - assert.strictEqual(err.code, 'WS_ERR_INVALID_DATA_PAYLOAD_LENGTH'); + assert.strictEqual(err.code, 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'); assert.strictEqual(err.message, 'Max payload size exceeded'); assert.strictEqual(err[kStatusCode], 1009); done(); @@ -904,7 +904,7 @@ describe('Receiver', () => { receiver.on('error', (err) => { assert.ok(err instanceof RangeError); - assert.strictEqual(err.code, 'WS_ERR_INVALID_DATA_PAYLOAD_LENGTH'); + assert.strictEqual(err.code, 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'); assert.strictEqual(err.message, 'Max payload size exceeded'); assert.strictEqual(err[kStatusCode], 1009); done(); @@ -934,7 +934,7 @@ describe('Receiver', () => { receiver.on('error', (err) => { assert.ok(err instanceof RangeError); - assert.strictEqual(err.code, 'WS_ERR_INVALID_DATA_PAYLOAD_LENGTH'); + assert.strictEqual(err.code, 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'); assert.strictEqual(err.message, 'Max payload size exceeded'); assert.strictEqual(err[kStatusCode], 1009); done();