Skip to content

[windows][crash] QQ 切微软拼音时 0xc0000005 — TSF DLL 链接动态 CRT 被 QQ 私有 MSVCP140 劫持 #288

@appergb

Description

@appergb

用户反馈

Windows 11 + QQ(QQEX.exe v9.9.26.44725)环境下,切换到微软拼音时 QQ 偶发崩溃。

崩溃信息:

异常代码:0xc0000005 (STATUS_ACCESS_VIOLATION)
故障模块:D:\program\QQ\versions\9.9.29-47354\resources\app\MSVCP140.dll
偏移:0x13080

初步判断

OpenLess 的 TSF 输入法组件 OpenLessIme.dll 会在输入法切换过程中被系统加载到当前前台应用进程中。

此前 OpenLessIme.dll 使用 MSBuild 默认运行库配置:

  • Release:MultiThreadedDLL
  • Debug:MultiThreadedDebugDLL

在部分应用环境中,宿主进程内已有的运行库版本可能与 OpenLessIme 构建时依赖的运行库存在兼容性差异。
当输入法组件在该进程内执行涉及 C++ 标准库的逻辑时,可能触发运行时异常,最终导致宿主应用崩溃。

该问题目前观察到与 QQ 9.9.x 环境相关,表现为切换输入法时 QQ 偶发崩溃。

修复

PR #287 已调整 OpenLessIme.vcxproj 的运行库配置,将 OpenLessIme 改为静态 CRT:

  • Release:MultiThreaded
  • Debug:MultiThreadedDebug

修复后,OpenLessIme.dll 不再依赖宿主进程内的动态 C++ 运行库,从而降低不同宿主应用环境下的运行库兼容性风险。

复现需要的环境

本机暂不具备完整复现环境,请协助验证。

需要环境:

  • Windows 11
  • 已安装 QQ 9.9.x
  • 已安装 OpenLess,且包含 OpenLessIme TSF 输入法组件
  • 微软拼音作为已启用输入法之一

最小复现 SOP:

  1. 打开 QQ 主聊天界面,焦点放在输入框
  2. 使用 Win+Space 切换到 OpenLess 输入法
  3. 使用 Win+Space 切换到微软拼音
  4. 多次往返切换,观察 QQ 是否在 5–30 秒内出现崩溃

验证方式

请分别验证以下场景:

预期结果:

  • 修复前:部分 QQ 9.9.x 环境下可能出现崩溃
  • 修复后:切换输入法不再导致 QQ 崩溃

关联

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingwindowsWindows-specific issue

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions