Skip to content

platform-crossgram: sanitize invalid QQ message strings - #5

Open
ZianTT wants to merge 1 commit into
std-microblock:mainfrom
ZianTT:fix/qqnt-invalid-unicode
Open

ZianTT wants to merge 1 commit into
std-microblock:mainfrom
ZianTT:fix/qqnt-invalid-unicode

Conversation

@ZianTT

@ZianTT ZianTT commented Oct 11, 2026

Copy link
Copy Markdown

platform-crossgram: 清理 QQNT 消息中的非法字符串字符

问题

QQNT 事件的消息文本、发送者备注等字段可能包含 NUL (U+0000) 或孤立的 UTF-16 代理码元。PostgreSQL 无法保存这些字符串,导致当前 WebSocket 事件持续重试,持久化检查点停住,后续 QQ 消息也无法按序处理。

修复

  • 在 QQNT 适配器生成会话和消息对象时,递归清理字符串中的 NUL 与孤立代理码元,保留正常的 Unicode 代理对。
  • 对文本及 Markdown 消息部分先清理内容,再按清理后的文本重新计算实体的偏移和长度,避免 @mention 范围错位。
  • 添加单元测试和事件重放端到端测试,覆盖异常发送者字段、消息文本、实体偏移,以及异常事件后的检查点推进和后续反应事件投递。

验证

  • yarn vitest run packages/platform-crossgram/src/platform.test.ts --config vitest.config.mts:129 项通过。
  • yarn vitest run packages/platform-crossgram/src/message-order.e2e.test.ts --config vitest.mtproto-e2e.config.mts --maxWorkers=1:20 项通过。
  • yarn typecheck --pretty false:通过。
  • 部署后,曾阻塞重放的异常事件顺利通过;对照 QQNT 事件日志,检查点之前的消息均已入库,检查点追上实时事件。

全是codex写的 修了个使用时遇到的问题 也不知道这个问题应该是在主项目改还是bridge改 所以如果有问题或者不欢迎ai-pr可以随时关闭orz

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