mirror of
https://github.com/Koenkk/zigbee2mqtt.git
synced 2026-10-23 22:32:40 +00:00
fix: Do not let a malformed WebSocket frame escape the message listener (#33275)
Signed-off-by: Arpit Jain <arpitjain099@gmail.com>
This commit is contained in:
1 parent
1d7d708ad5
commit
6cd4aeb032
2 files changed
+13
-2
No files matched your search
@@ -163,8 +163,13 @@ export class Frontend extends Extension {
|
||||
ws.on("message", (data: Buffer, isBinary: boolean) => {
|
||||
if (!isBinary && data) {
|
||||
const message = data.toString();
|
||||
const {topic, payload} = JSON.parse(message);
|
||||
this.mqtt.onMessage(`${this.mqttBaseTopic}/${topic}`, Buffer.from(stringify(payload)));
|
||||
|
||||
try {
|
||||
const {topic, payload} = JSON.parse(message);
|
||||
this.mqtt.onMessage(`${this.mqttBaseTopic}/${topic}`, Buffer.from(stringify(payload)));
|
||||
} catch {
|
||||
logger.error(`Received invalid message from WebSocket: ${message}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -262,6 +262,12 @@ describe("Extension: Frontend", () => {
|
||||
mockWSClientEvents.message(null, false);
|
||||
await flushPromises();
|
||||
|
||||
// Malformed payload, must not escape the listener
|
||||
mockLogger.error.mockClear();
|
||||
expect(() => mockWSClientEvents.message("not json", false)).not.toThrow();
|
||||
expect(mockLogger.error).toHaveBeenCalledWith("Received invalid message from WebSocket: not json");
|
||||
await flushPromises();
|
||||
|
||||
// Error
|
||||
mockWSClientEvents.error(new Error("This is an error"));
|
||||
expect(mockLogger.error).toHaveBeenCalledWith("WebSocket error: This is an error");
|
||||
|
||||
Reference in new issue
Block a user