From d927a8cfa7323cd3d482c1762f8940610ed1d3c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 24 Sep 2026 17:43:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E4=BF=9D=E5=AD=98=E5=AE=9A?= =?UTF-8?q?=E4=BB=B7=E7=9A=84=E7=89=88=E6=9C=AC=E6=8E=A8=E8=BF=9B=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E9=A5=B1=E5=92=8C=E5=8A=A0=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - server-rs/crates/api-server/src/state.rs:expected_updated_at_micros 来自后台请求体、只校验了必须给出,没有范围校验;expected + 1 在 i64::MAX 上会溢出(debug 下 panic、release 下回绕成 i64::MIN 并让版本推进失效),改用 saturating_add(与测试分支同一口径) --- server-rs/crates/api-server/src/state.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server-rs/crates/api-server/src/state.rs b/server-rs/crates/api-server/src/state.rs index a38f565fd..81ca0b913 100644 --- a/server-rs/crates/api-server/src/state.rs +++ b/server-rs/crates/api-server/src/state.rs @@ -868,8 +868,10 @@ impl AppState { let records = editor_generation_pricing_to_records(&next)?; // 版本取「当前时间」与「期望版本 + 1」的较大值:同一微秒内的连续保存也必须推进版本, // 否则旧的期望版本会在下一次保存时被误判为仍然有效。 - let updated_at_micros = - crate::editor_project::current_utc_micros().max(expected_updated_at_micros + 1); + // expected_updated_at_micros 来自后台请求体,只有「必须给出」的校验、没有范围校验: + // 直接 +1 在 i64::MAX 上会溢出(debug 下 panic,release 下回绕成 i64::MIN)。 + let updated_at_micros = crate::editor_project::current_utc_micros() + .max(expected_updated_at_micros.saturating_add(1)); let record = self .spacetime_client .upsert_editor_generation_pricing_config(editor_generation_pricing_upsert_input(