From 5e21b744872ea057dc6fc440e8e03c43b90ac573 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Thu, 4 Jun 2026 20:33:46 +0800 Subject: [PATCH] fix: prevent bigint precision loss in structured filter value parsing When parseFilterValue converts numeric strings to JS Number, integers exceeding Number.MAX_SAFE_INTEGER lose precision (e.g. 2062449923745665025 becomes 2062449923745665024). Keep them as strings so the Rust backend can parse them exactly via serde_json::Number. --- apps/desktop/src/lib/dataGridColumnFilter.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/desktop/src/lib/dataGridColumnFilter.ts b/apps/desktop/src/lib/dataGridColumnFilter.ts index 8a2bfdea6a..f883d97902 100644 --- a/apps/desktop/src/lib/dataGridColumnFilter.ts +++ b/apps/desktop/src/lib/dataGridColumnFilter.ts @@ -52,7 +52,14 @@ export function parseFilterValue(rawValue: string, columnInfo?: Pick Number.MAX_SAFE_INTEGER). + // The Rust backend parses strings exactly via serde_json::Number, so this is safe. + if (Number.isInteger(numeric) && Math.abs(numeric) > Number.MAX_SAFE_INTEGER) { + return unquoted; + } + return numeric; + } } return unquoted;