mirror of
https://gitee.com/spark-store-project/spark-store
synced 2026-09-21 06:00:11 +08:00
fix: 安全与健壮性排查修复(IPC 类型校验/AbortSignal/空名去重/窗口 await)
阻断项: - install-manager: uninstall-installed / remove-installed / check-installed 由 any 改为 unknown + parseAppPayload 严格解析(PKGNAME_PATTERN 校验 pkgname,origin 仅限 spark|apm),消除命令注入风险;parseAppPayload/PKGNAME_PATTERN 提升至模块顶部复用并避免 TDZ - App.vue openDetail: 参数由 Record<string,unknown> 收紧为 App | OpenDetailInput,新增 pkgname 运行时校验,避免访问 undefined 属性 改进项: - App.vue homeLinks 去重:跳过空名称避免污染 seenNames,并对 links 数组与 HomeLink 必需字段做校验 - App.vue fetchWithRetry: 新增 AbortSignal 参数,递归链路传递,组件卸载时 rootAbortController.abort() 取消未完成任务 - index.ts showAndFocusMainWindow: 改为 async 并 await createWindow,调用点用 void 修饰避免 floating promise vue-tsc --noEmit 通过。
This commit is contained in:
@@ -272,9 +272,10 @@ const requestApplicationExit = (): void => {
|
||||
app.quit();
|
||||
};
|
||||
|
||||
const showAndFocusMainWindow = (): void => {
|
||||
const showAndFocusMainWindow = async (): Promise<void> => {
|
||||
if (!win || win.isDestroyed()) {
|
||||
createWindow();
|
||||
// 等待窗口创建完成,创建失败时调用方可通过异常感知
|
||||
await createWindow();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -643,11 +644,11 @@ app.on("window-all-closed", () => {
|
||||
});
|
||||
|
||||
app.on("second-instance", () => {
|
||||
showAndFocusMainWindow();
|
||||
void showAndFocusMainWindow();
|
||||
});
|
||||
|
||||
app.on("activate", () => {
|
||||
showAndFocusMainWindow();
|
||||
void showAndFocusMainWindow();
|
||||
});
|
||||
|
||||
app.on("will-quit", () => {
|
||||
@@ -700,7 +701,7 @@ app.whenReady().then(() => {
|
||||
{
|
||||
label: "显示主界面",
|
||||
click: () => {
|
||||
showAndFocusMainWindow();
|
||||
void showAndFocusMainWindow();
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -719,7 +720,7 @@ app.whenReady().then(() => {
|
||||
win.hide();
|
||||
win.setSkipTaskbar(true);
|
||||
} else {
|
||||
showAndFocusMainWindow();
|
||||
void showAndFocusMainWindow();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user