Skip to content

fix: clear CodeQL alerts and keep Android surfaces in sync with the app theme - #7

Merged
axuitomo merged 2 commits into
masterfrom
fix/code-scanning-alerts-and-surface-theme
Sep 20, 2026
Merged

axuitomo merged 2 commits into
masterfrom
fix/code-scanning-alerts-and-surface-theme

Conversation

@axuitomo

Copy link
Copy Markdown
Owner

内容

1. Code Scanning 告警(5 个 open)

告警 位置 处理
go/zipslip (high) internal/app/update.go zip/tar 解压改用 filepath.IsLocal 正向守卫(CodeQL 的 IsLocalCheck 只识别这个形式),删除 safeArchiveTargetPath,新增两个穿越回归测试
java/android/implicit-pendingintents (high) ×2 AndroidKeepAliveForegroundService.kt、ProbeForegroundService.kt PendingIntent 改用 Intent() + setClass(this, MainActivity::class.java) 显式组件;顺带删除两个从未被读取的自定义 action
java/xss (high)、java/error-message-exposure (medium) Capacitor MessageHandler.java(位于 node_modules 内) 该源码是 Gradle 子项目带进 CodeQL 数据库的第三方代码:新增 .github/codeql/codeql-config.yml 的 paths-ignore: node_modules/**,并在 CodeQL init 步骤用 config-file 引用

2. Android 白屏与主题

  • 渲染进程被系统回收后由 MainActivity 重建 WebView,不再终止整个进程(运行中的探测任务保持不中断、不会被标记为 recovery_required)。
  • 启动窗口、窗口背景、WebView 底色取同一颜色;frontend/index.html 的内联首帧启动画面兜住 Vue 挂载前的空档。
  • 主题跟随前端配置:SetSurfaceTheme → AndroidSurfaceTheme → SharedPreferences,冷启动与 recreate() 都按缓存主题 setTheme,切换主题时立即刷新窗口与 WebView 底色。
  • Android 12+ 启动窗口图标改为 @mipmap/ic_launcher(此前是系统通用图标),values-night 覆盖系统深色模式下的启动窗口底色。

验证

  • scripts/checks/check.sh 通过:Go 全量测试、go test -tags webui ./internal/app/、frontend boundary / vapor / 单测(27 passed)/ typecheck / 生产构建。
  • golangci-lint run、actionlint、markdownlint-cli2:0 issues。
  • Android:assembleDebug detektDebug detektDebugUnitTest ktlintMainSourceSetCheck testDebugUnitTest --offline BUILD SUCCESSFUL;debug APK 已确认 assets/public/index.html 含首帧与主题脚本、app_background_dark 进入资源。
  • 未验证项:本地没有 CodeQL CLI,告警是否被识别为已修复需要等本 PR 的 CodeQL 任务;没有设备 / AVD,启动图标与深色启动窗口的实际观感需要在真机确认。

行为变化说明

  • 压缩包里带绝对路径或以 \ 开头的条目现在会被跳过(旧实现会去掉前导分隔符后照常解压);没有 .. 逃逸的条目不受影响。
  • 冷启动第一帧的系统启动窗口早于 app 代码运行,只能跟随系统深色模式;前端强制浅色而系统为深色时首帧仍可能偏深。

- go/zipslip:zip/tar 解压改用 filepath.IsLocal 正向守卫(CodeQL 只识别该形式),删掉 safeArchiveTargetPath,补两个穿越用例。

- java/android/implicit-pendingintents:通知用的 PendingIntent 改为 Intent() + setClass 显式组件,并删除两个从未被读取的自定义 action。

- node_modules 里的 Capacitor 源码随 Gradle 子项目进入 Kotlin 数据库:新增 .github/codeql/codeql-config.yml 的 paths-ignore 并在 init 步骤引用。
- 渲染进程被系统回收后由 MainActivity 重建 WebView(进程、Go runtime 与运行中的探测任务不中断);启动窗口、窗口背景与 WebView 底色取同一颜色,frontend/index.html 的内联首帧启动画面兜住 Vue 挂载前的空档。

- 主题跟随前端配置:frontend/src/lib/surfaceTheme.ts 把解析结果写入 localStorage 并调用 SetSurfaceTheme,AndroidSurfaceTheme 缓存到 SharedPreferences,MainActivity 在 super.onCreate 之前按缓存值 setTheme,切换主题时刷新窗口与 WebView 底色。

- Android 12+ 启动窗口图标改用 @mipmap/ic_launcher;values-night 覆盖系统深色模式下的启动窗口底色。
@axuitomo
axuitomo merged commit 1015577 into master Sep 20, 2026
9 checks passed
@axuitomo
axuitomo deleted the fix/code-scanning-alerts-and-surface-theme branch September 20, 2026 12:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant