diff --git a/lib/index.ts b/lib/index.ts index d858915..2cea37e 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -131,6 +131,11 @@ export class Encoder { } } +// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript +function isObject(value: any): boolean { + return Object.prototype.toString.call(value) === "[object Object]"; +} + interface DecoderReservedEvents { decoded: (packet: Packet) => void; } @@ -280,11 +285,11 @@ export class Decoder extends Emitter<{}, {}, DecoderReservedEvents> { private static isPayloadValid(type: PacketType, payload: any): boolean { switch (type) { case PacketType.CONNECT: - return typeof payload === "object"; + return isObject(payload); case PacketType.DISCONNECT: return payload === undefined; case PacketType.CONNECT_ERROR: - return typeof payload === "string" || typeof payload === "object"; + return typeof payload === "string" || isObject(payload); case PacketType.EVENT: case PacketType.BINARY_EVENT: return ( diff --git a/test/parser.js b/test/parser.js index 915e746..46a6e1b 100644 --- a/test/parser.js +++ b/test/parser.js @@ -115,6 +115,7 @@ describe("socket.io-parser", () => { isInvalidPayload('442["some","data"'); isInvalidPayload('0/admin,"invalid"'); + isInvalidPayload("0[]"); isInvalidPayload("1/admin,{}"); isInvalidPayload('2/admin,"invalid'); isInvalidPayload("2/admin,{}");