From 01d7fe459745c3b7fd24e2882d58c9eb5da245b1 Mon Sep 17 00:00:00 2001 From: liuyi Date: Tue, 7 Nov 2023 16:27:17 +0800 Subject: [PATCH] fix(server): avoid saving invalid data (#4859) --- packages/backend/server/src/modules/doc/manager.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/backend/server/src/modules/doc/manager.ts b/packages/backend/server/src/modules/doc/manager.ts index fde40fa8e6..7f8de7b9f6 100644 --- a/packages/backend/server/src/modules/doc/manager.ts +++ b/packages/backend/server/src/modules/doc/manager.ts @@ -32,6 +32,14 @@ function compare(yBinary: Buffer, jwstBinary: Buffer, strict = false): boolean { return compare(yBinary, yBinary2, true); } +function isEmptyBuffer(buf: Buffer): boolean { + return ( + buf.length == 0 || + // 0x0000 + (buf.length === 2 && buf[0] === 0 && buf[1] === 0) + ); +} + const MAX_SEQ_NUM = 0x3fffffff; // u31 /** @@ -377,6 +385,11 @@ export class DocManager implements OnModuleInit, OnModuleDestroy { ) { const blob = Buffer.from(encodeStateAsUpdate(doc)); const state = Buffer.from(encodeStateVector(doc)); + + if (isEmptyBuffer(blob)) { + return null; + } + return this.db.snapshot.upsert({ where: { id_workspaceId: {