📢 【三方库】ohos_coap v2.0.22 鸿蒙平台稳定性与质量提升

ohos_coap v2.0.22 已发布。本次升级聚焦该库稳定性提升,修复 CVE-2026-29013 涉及的 PDU 缩容越界、空指针解引用及断言崩溃问题,兼容升级,开发者无需修改现有代码即可享受本次改进。推荐所有该库用户升级至本版本。

版本概览

类型 内容
稳定性 修复 CVE-2026-29013(libcoap PDU 缩容越界、缓存条目空指针解引用、option 插入断言崩溃)

稳定性提升

修复 CVE-2026-29013

问题:上游 libcoap 存在 sanitizer 报告的若干内存安全问题,根因有三:

  1. coap_pdu_resize()pdu->alloc_size = new_size 赋值位于 if (new_size > pdu->alloc_size) 分支之外,导致当传入的 new_size 小于当前 alloc_size(缩容场景)时,alloc_size 仍被错误更新为更小值,使后续操作可越过已分配缓冲区访问,造成 options 数据混乱。
  2. coap_insert_option()pdu->max_opt 与实际最大 option 不一致时(可由上述缩容问题触发)直接调用 assert(option != NULL),在 Release 构建下或异常输入下引发崩溃。
  3. coap_new_cache_entry_lkd()COAP_CACHE_RECORD_PDU 记录缓存时,无条件执行 entry->pdu->data = entry->pdu->token + (pdu->data - pdu->token),未校验 pdu->data 是否为空,当 PDU 无 payload 时产生空指针解引用。

修复(通过新增 libcoap/src/main/cpp/thirdModule/0001-CVE-2026-29013.patch 并在 modify.sh 中应用):

  • src/coap_pdu.c coap_pdu_resize():将 pdu->alloc_size = new_size; 移入 if (new_size > pdu->alloc_size) 分支内部,仅在扩容时更新,拒绝缩容,消除越界根因。
  • src/coap_pdu.c coap_insert_option():以 if (option == NULL) { coap_log_warn("coap_insert_option: Broken max_opt\n"); return 0; } 替换原 assert(option != NULL),将崩溃转为安全告警并优雅返回。
  • src/coap_cache.c coap_new_cache_entry_lkd():在计算 data 指针偏移前增加 if (pdu->data) 判空,避免空指针解引用。

兼容性说明

  • 无 Breaking Changes,API 接口保持不变。
  • 本次变更以缺陷修复为主,现有代码无需修改。
  • 从 v2.0.21 起升级至 v2.0.22 均为兼容性升级。

升级方式

  • 鸿蒙原生:oh-package.json5"@ohos/coap": "^2.0.22",执行 ohpm install

相关链接

  • 文档:https://gitcode.com/CPF-ApplicationTPC/ohos_coap/blob/master/README.md
  • CHANGELOG:https://gitcode.com/CPF-ApplicationTPC/ohos_coap/blob/master/CHANGELOG.md
  • 反馈:https://gitcode.com/CPF-ApplicationTPC/ohos_coap/issues
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐