From 6b59ae3d6e9ebcb000ce90b4984206b83d76500b Mon Sep 17 00:00:00 2001 From: "pikachu1995@126.com" Date: Thu, 22 Oct 2026 09:51:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=86=E7=B1=BB=E9=A1=B5=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E7=BC=93=E5=AD=98=E8=AF=BB=E5=87=BA=E5=90=8E=E5=90=8C?= =?UTF-8?q?=E6=A0=B7=E8=BF=87=20sanitize=20=E6=B8=85=E6=B4=97,=E9=98=B2?= =?UTF-8?q?=E7=AF=A1=E6=94=B9/=E6=97=A7=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/categoryPageSetting.js | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/utils/categoryPageSetting.js b/utils/categoryPageSetting.js index 5ec0120..0976060 100644 --- a/utils/categoryPageSetting.js +++ b/utils/categoryPageSetting.js @@ -15,19 +15,12 @@ export const DEFAULT_CATEGORY_PAGE_SETTING = { const STORAGE_KEY = "category_page_setting"; const EXPIRATION_KEY = "category_page_setting_expiration_time"; -/** - * 归一化分类页设置。入参为 buyer 接口 result(Setting 实体或 null), - * null / 解析失败 / 缺键 / template 非 1-4 一律回退默认值。 - */ -export function normalizeCategoryPageSetting(setting = null) { - const fallback = () => JSON.parse(JSON.stringify(DEFAULT_CATEGORY_PAGE_SETTING)); - if (!setting || !setting.settingValue) return fallback(); - let raw; - try { - raw = JSON.parse(setting.settingValue); - } catch { - return fallback(); - } +function fallback() { + return JSON.parse(JSON.stringify(DEFAULT_CATEGORY_PAGE_SETTING)); +} + +/** 对已解析的配置对象做字段级清洗(缺键补默认、非法值回退)。 */ +function sanitize(raw) { if (!raw || typeof raw !== "object") return fallback(); const result = fallback(); if ([1, 2, 3, 4].includes(raw.template)) { @@ -43,6 +36,19 @@ export function normalizeCategoryPageSetting(setting = null) { return result; } +/** + * 归一化分类页设置。入参为 buyer 接口 result(Setting 实体或 null), + * null / 解析失败 / 缺键 / template 非 1-4 一律回退默认值。 + */ +export function normalizeCategoryPageSetting(setting = null) { + if (!setting || !setting.settingValue) return fallback(); + try { + return sanitize(JSON.parse(setting.settingValue)); + } catch { + return fallback(); + } +} + export function cacheCategoryPageSetting(data) { const expirationTime = new Date().setHours(new Date().getHours() + 1); uni.setStorageSync(EXPIRATION_KEY, expirationTime); @@ -55,7 +61,9 @@ export function loadCachedCategoryPageSetting() { expirationTime && new Date() <= new Date(Number(expirationTime)); if (!cacheValid) return null; try { - return uni.getStorageSync(STORAGE_KEY) || null; + const cached = uni.getStorageSync(STORAGE_KEY); + // 缓存可能被篡改/来自旧版本,读出后同样过清洗 + return cached ? sanitize(cached) : null; } catch { return null; }