From 7c1da3f979cc6e189e72770f0ce3d1e8075ea69e Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Wed, 12 Aug 2026 14:33:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20Instant=20=E5=8F=82=E6=95=B0=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E6=8C=89=E8=A7=84=E8=8C=83=E2=80=94=E2=80=94=E9=9D=9E?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E5=8E=9F=E5=A7=8B=E5=80=BC=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E6=8A=9B=20TypeError=EF=BC=88from/compare/equals/sinc?= =?UTF-8?q?e/until=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_builtins/src/temporal.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/oxide_builtins/src/temporal.rs b/crates/oxide_builtins/src/temporal.rs index 3edf2517..c4fd3837 100644 --- a/crates/oxide_builtins/src/temporal.rs +++ b/crates/oxide_builtins/src/temporal.rs @@ -453,8 +453,15 @@ fn instant_like_epoch_ns(vm: &mut H, value: JsValue) -> Result ParseTemporalInstantString(解析失败 RangeError)。 + let input = oxide_runtime_api::to_string_full(value, vm).map_err(|error| native_engine_error(vm, &error))?; + return parse_instant_string(&input).ok_or_else(|| crate::error::create_range_error(vm, "invalid ISO 8601 string")); } - let input = oxide_runtime_api::to_string_full(value, vm).map_err(|error| native_engine_error(vm, &error))?; + // 非字符串原始值(undefined/null/boolean/number/bigint/symbol)按规范直接抛 TypeError。 + if !value.is_string() { + return Err(crate::error::create_type_error(vm, "cannot convert to Instant")); + } + let input = to_string(value); parse_instant_string(&input).ok_or_else(|| crate::error::create_range_error(vm, "invalid ISO 8601 string")) }