From 76d82886e40e01fadc7f3e0d392ad43c9c766d44 Mon Sep 17 00:00:00 2001 From: Yang Yongquan Date: Wed, 16 Sep 2026 12:34:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E8=BF=9B=E5=85=A5?= =?UTF-8?q?=E6=97=A5=E5=8E=86=E6=B2=A1=E6=9C=89=E6=97=A5=E7=A8=8B=E5=8D=A1?= =?UTF-8?q?=E7=89=87=E7=9A=84bug=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Yang Yongquan --- .../main/ets/entryability/EntryAbility.ets | 6 ++++- entry/src/main/ets/pages/Index.ets | 22 ++++++++++++------- entry/src/main/ets/pages/widget/Widget4x4.ets | 5 +++-- entry/src/main/ets/pages/widget/Widget6x4.ets | 5 +++-- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index ffec780..e80d456 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -69,9 +69,13 @@ export default class EntryAbility extends UIAbility { odMs = parsed; } } - if (odMs > 0) { + // 合法性校验:13 位毫秒时间戳若按 int32 传递会溢出成 2147483647 等小值 → + // 只接受 [2000-01-01, 2100-01-01] 区间,避免把日历定位到 1970 + if (odMs >= 946684800000 && odMs <= 4102444800000) { AppStorage.setOrCreate('widgetOpenDate', odMs); LogUtil.write(`卡片进入日历:定位到显示日 ${odMs}`); + } else if (odMs > 0) { + LogUtil.write(`卡片 openDate 非法(疑似 int32 溢出):${odMs},忽略`); } } } diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index d2a38f3..2e1ee75 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -103,10 +103,13 @@ struct Index { this.selectedDate = this.startOfDay(now.getTime()); // 卡片点击:若携带显示日(用户可能已翻到其他日期),进入日历时定位到那一天 const openFromCard: number = AppStorage.get('widgetOpenDate') ?? 0; - if (openFromCard > 0) { - this.selectedDate = this.startOfDay(openFromCard); - AppStorage.setOrCreate('widgetOpenDate', 0); - LogUtil.write(`从卡片进入:定位到显示日 ${this.selectedDate}`); + if (openFromCard !== 0) { + AppStorage.setOrCreate('widgetOpenDate', 0); // 用后即清,避免残留 + // 合法性校验(防 int32 溢出等脏值把日历定位到 1970) + if (openFromCard >= 946684800000 && openFromCard <= 4102444800000) { + this.selectedDate = this.startOfDay(openFromCard); + LogUtil.write(`从卡片进入:定位到显示日 ${this.selectedDate}`); + } } this.rebuildPages(); this.initLandscapeListener(); @@ -181,10 +184,13 @@ struct Index { /** 卡片点击携带的"显示日":App 已在后台运行时由 onNewWant 改写,定位到那一天后清除 */ private onWidgetOpenDateChange(): void { const d: number = this.widgetOpenDate; - if (d > 0) { - this.selectedDate = this.startOfDay(d); - AppStorage.setOrCreate('widgetOpenDate', 0); - LogUtil.write(`卡片切入(运行中):定位到显示日 ${this.selectedDate}`); + if (d !== 0) { + AppStorage.setOrCreate('widgetOpenDate', 0); // 用后即清,避免残留 + // 合法性校验(防 int32 溢出等脏值) + if (d >= 946684800000 && d <= 4102444800000) { + this.selectedDate = this.startOfDay(d); + LogUtil.write(`卡片切入(运行中):定位到显示日 ${this.selectedDate}`); + } } } diff --git a/entry/src/main/ets/pages/widget/Widget4x4.ets b/entry/src/main/ets/pages/widget/Widget4x4.ets index 290a6d2..7b2415d 100644 --- a/entry/src/main/ets/pages/widget/Widget4x4.ets +++ b/entry/src/main/ets/pages/widget/Widget4x4.ets @@ -422,8 +422,9 @@ struct Widget4x4Card { postCardAction(this, { action: 'router', abilityName: 'EntryAbility', - // 携带卡片当前显示日(用户可能已翻到其他日期),进入日历时定位到这一天 - params: { openDate: this.selectedDate } + // 携带卡片当前显示日(用户可能已翻到其他日期),进入日历时定位到这一天。 + // 必须转成字符串:param 的数值按 int32 传递,13 位毫秒时间戳会溢出成 2147483647(曾导致定位到 1970) + params: { openDate: `${this.selectedDate}` } }); } diff --git a/entry/src/main/ets/pages/widget/Widget6x4.ets b/entry/src/main/ets/pages/widget/Widget6x4.ets index 1b6b885..72ef4da 100644 --- a/entry/src/main/ets/pages/widget/Widget6x4.ets +++ b/entry/src/main/ets/pages/widget/Widget6x4.ets @@ -419,8 +419,9 @@ struct Widget6x4Card { postCardAction(this, { action: 'router', abilityName: 'EntryAbility', - // 携带卡片当前显示日(用户可能已翻到其他日期),进入日历时定位到这一天 - params: { openDate: this.selectedDate } + // 携带卡片当前显示日(用户可能已翻到其他日期),进入日历时定位到这一天。 + // 必须转成字符串:param 的数值按 int32 传递,13 位毫秒时间戳会溢出成 2147483647(曾导致定位到 1970) + params: { openDate: `${this.selectedDate}` } }); }