issue处理注意事项:
1. 提交正常修复分支的修复PR时,必须关联当前issue,否则无法关闭当前issue;
2. 模板内容需要填写完整, 无论是受影响或者不受影响都需要填写完整内容;
3. 以下为模板中需要填写完整的内容, 请复制到评论区回复;
注: 内容的关键词(影响性分析说明, openEuler评分, 受影响版本排查(受影响/不受影响), 修复是否涉及abi变化(是/否), 原因说明)不能省略,省略后cve-manager将无法正常解析填写内容.
影响性分析说明:
openEuler评分: (评分和向量)
受影响版本排查(受影响/不受影响):
1.master(1.652):
2.openEuler-20.03-LTS-SP4(1.643):
3.openEuler-22.03-LTS-SP4(1.643):
4.openEuler-24.03-LTS-Next(1.648):
5.openEuler-24.03-LTS-SP1(1.643):
6.openEuler-24.03-LTS-SP3(1.643):
7.openEuler-24.03-LTS-SP4(1.648):
修复是否涉及abi变化(是/否):
1.master(1.652):
2.openEuler-20.03-LTS-SP4(1.643):
3.openEuler-22.03-LTS-SP4(1.643):
4.openEuler-24.03-LTS-Next(1.648):
5.openEuler-24.03-LTS-SP1(1.643):
6.openEuler-24.03-LTS-SP3(1.643):
7.openEuler-24.03-LTS-SP4(1.648):
原因说明:
1.master(1.652):
2.openEuler-20.03-LTS-SP4(1.643):
3.openEuler-22.03-LTS-SP4(1.643):
4.openEuler-24.03-LTS-Next(1.648):
5.openEuler-24.03-LTS-SP1(1.643):
6.openEuler-24.03-LTS-SP3(1.643):
7.openEuler-24.03-LTS-SP4(1.648):
原因说明填写请参考下方表格(注意:版本是否受影响和版本的原因说明必须对应,例如master版本分支受影响,那原因说明只能是受影响对应的原因之一!):
分支状态 |
原因说明 | 使用场景 |
|---|---|---|
| 受影响 | 正常修复 | 受影响且需要修复(包含升级版本修复)的漏洞; 受影响且已经修复的漏洞(历史修复PR也需要关联issue); 若因特殊原因无法修复,应修改原因说明为【不修复-特殊原因】,并在安委会备案相关情况。 |
| 受影响 | 暂不修复-漏洞仍在分析中 | 已关注到相关漏洞,正在处理,未明确漏洞影响和修复方案。 |
| 受影响 | 暂不修复-暂无解决方案或补丁 | 当前没有可用的修复或补救措施。【影响性分析】中应包含有关为什么没有修复或补救措施的详细说明、上游相关PR等。 |
| 受影响 | 不修复-超出修复范围 | 没有漏洞的修复计划。当版本停维、软件包宣布生命周期终止或弃用使用。 |
| 受影响 | 不修复-特殊原因导致不再修复 | 如存在其他特殊情况不修复相关漏洞,或评估后无法升级修复,应在openEuler社区安全委员会例会进行说明备案。 【影响性分析】中应包含不发布修复的详细说明、特殊情况还应有安委会会议纪要。 |
| 不受影响 | 不受影响-组件不存在 | 软件不受影响,因为易受攻击的组件不在产品中。 |
| 不受影响 | 不受影响-已有内置的内联控制或缓解措施 | 内置的内联控制或缓解措施可防止攻击者利用漏洞 |
| 不受影响 | 不受影响-漏洞代码不能被攻击者触发 | 易受攻击的组件存在,并且该组件包含易受攻击的代码。但是,易受攻击的代码的使用方式使得攻击者无法进行任何预期的攻击。 |
| 不受影响 | 不受影响-漏洞代码不在执行路径 | 易受影响的代码在执行过程中不可访问,包括产品的非预期状态。产品不使用也不执行的组件。 |
| 不受影响 | 不受影响-漏洞代码不存在 | 产品不受影响,因为漏洞背后的代码在产品中不存在。与component_not_present不同的是,有问题的组件存在,但由于某种原因(例如安全的编译器选项)使漏洞的特定代码不存在于组件中。 |
issue处理具体操作请参考:
https://atomgit.com/openeuler/cve-manager/blob/master/cve-vulner-manager/doc/md/manual.md
pr关联issue具体操作请参考:
https://docs.atomgit.com/docs/help/home/org_project/pullrequests/pr-related-issue


Welcome To openEuler Community
Hey @openeuler-ci-bot , thanks for your contribution to the community.
Bot Usage Manual
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here . That means you can comment below every pull request or issue to trigger Bot Commands. You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
Contact Guide
If you have any questions, please contact the SIG: sig-perl-modules ,
and any of the maintainers: @shinwell_hu ,
and any of the committers: @licunlong, @overweight, @shenyangyang .


/branches master /name hugel /email 2712504175@qq.com


【任务 #20 · master】CVE-2026-88815
1. 是否受影响
结论:受影响。
原因:DBI 的 sql_type_cast_svpv 在 SQL_NUMERIC 分支中直接把 SV 的字符串指针/长度传给转换函数,未对 IV/NV 标量先做 SvPV 字符串化,导致数值被当作字符串错误处理。源码影响性分析已定位漏洞代码:DBI-1.652/DBI.xs:1923 函数 sql_type_cast_svpv 的 SQL_NUMERIC 分支(1958-1978 行),其中 1961 行 grok_number(SvPVX(sv), SvCUR(sv), &uv) 即 CVE 所述缺陷代码,master 分支源码仍保留该漏洞代码,需要修复。
分支状态:
- master(1.652):受影响
2. 修复补丁
上游社区补丁:https://github.com/perl5-dbi/dbi/commit/e5ad87e5602da995d28b4d65df222368b58d6702.patch
3. 补丁适配情况
已生成适配补丁 backport-CVE-2026-88815.patch(状态:adapted,置信度:high),无前置补丁。
- 冲突原因:上游补丁基于未发布的 DBI 1.654,目标为 1.652 基线,共 5 个 hunk。核心修复 hunk(DBI.xs @@ -1957,8 +1957,10 @@)与测试 hunk(t/90sql_type_cast.t @@ -49,6 +49,22 @@)上下文零偏移、可直接应用;其余 3 个 hunk(ChangeLog、dbixs_rev.h、lib/DBI/Changes.pm)为版本元数据/变更日志,其上下文在 1.652 基线不存在,无法直接套用。
- 适配内容:核心修复逻辑逐字节保真——SQL_NUMERIC 分支新增
STRLEN len; char *p = SvPV(sv, len);强制字符串化并处理 magic,grok_number改用(p, len, &uv),修复 IV/NV 标量未字符串化时直读 SvPVX 原始缓冲区的缺陷;测试 hunk(新增 8 个 IV/NV 用例)原样保留。3 个元数据 hunk 予以跳过,避免捏造 1.654 条目及版本戳(DBIXS_REVISION 参与 DBD 驱动兼容性检查,虚假值会产生误导)。适配补丁真实统计:2 files changed, 19 insertions(+), 1 deletion(-)。 - 落地验证:补丁已应用到源码目录并提交,git diff --stat 确认 DBI.xs 4 行、t/90sql_type_cast.t 16 行插入;在 HEAD~1 临时 worktree 上 git apply --check 验证通过;grep 确认 DBI.xs:1961 处 SvPV 修复代码真实存在。
4. 修复 PR
已提交 PR(master):https://gitcode.com/src-openeuler/perl-DBI/merge_requests/88
──────── 复制以下内容回填 issue ────────
受影响版本排查(受影响/不受影响):
1.master(1.652): 受影响
ABI 变化:否
原因说明:
1.master(1.652): 正常修复
────────────────────────────────────────


/branches master openEuler-24.03-LTS-Next /patch_url https://github.com/perl5-dbi/dbi/commit/e5ad87e5602da995d28b4d65df222368b58d6702.patch https://github.com/perl5-dbi/dbi/commit/ff4f1baf0389dfa5e7282e1d8d7423c1b5e06b76.patch /name hugel /email 2712504175@qq.com


【任务 #20 · openEuler-24.03-LTS-Next】CVE-2026-88815
是否受影响:受影响
漏洞路径函数 sql_type_cast_svpv(DBI.xs:1951,经 DBI.xs:4992 的 sql_type_cast XS 包装与 DBI.xs:553 的 DBIS 函数指针暴露)存在于目标源码 DBI-1.648,漏洞模式 grok_number(SvPVX(sv), SvCUR(sv), &uv) 在 DBI.xs:1989 逐字匹配、尚未修复,漏洞代码存在于本版本源码,需要修复。
分支状态:
- openEuler-24.03-LTS-Next(版本 1.648):受影响
修复补丁:已找到上游修复补丁:
- https://github.com/perl5-dbi/dbi/commit/e5ad87e5602da995d28b4d65df222368b58d6702.patch
- https://github.com/perl5-dbi/dbi/commit/ff4f1baf0389dfa5e7282e1d8d7423c1b5e06b76.patch
补丁适配情况:已进行适配,共 2 个补丁:
- backport-CVE-2026-88815-1.patch(已适配,置信度 high)
- 冲突原因:原补丁 5 个 hunk 中 3 个元数据 hunk(ChangeLog、dbixs_rev.h、lib/DBI/Changes.pm)绑定上游 1.654 dev cycle 的版本条目,而基线为 DBI 1.648,对应变更行在源码中不存在,无法逐字移植。
- 适配内容:参照同系列 Patch6004(backport-CVE-2026-73194.patch,完全相同的 3 文件冲突签名)先例,跳过这 3 个不含安全逻辑的元数据文件;DBI.xs(核心修复:以 SvPV 强制字符串化替代裸 SvPVX/SvCUR 读取)与 t/90sql_type_cast.t(16 条 IV/NV 回归测试)2 个 hunk 原样保留,核心变更行与原补丁逐字节一致,仅 DBI.xs hunk 行号偏移 +28(@@ -1957,8 +1957,10 @@ → @@ -1985,8 +1985,10 @@)。
- 落地验证:改动已真实应用并提交(commit 0deab9f,基于 baseline d9e5348;diff stat:DBI.xs 4 行、t/90sql_type_cast.t 16 行,共 19 insertions / 1 deletion),生成的补丁在基线临时 worktree 上 git apply --check 验证通过;工作树 grep 证实漏洞模式已消除、修复语句 char *p = SvPV(sv, len) 位于 DBI.xs:1989,后继补丁 backport-CVE-2026-88815-2.patch 依赖的删除上下文逐字节完好,链式适配不受影响。
- backport-CVE-2026-88815-2.patch(无冲突,原样应用,置信度 high)
PR 提交情况:已提交 PR:
- openEuler-24.03-LTS-Next:https://gitcode.com/src-openeuler/perl-DBI/merge_requests/89
──────── 复制以下内容回填 issue ────────
受影响版本排查(受影响/不受影响):
1.openEuler-24.03-LTS-Next(1.648): 受影响
ABI 变化:否
原因说明:
1.正常修复
────────────────────────────────────────


【任务 #20 · master】CVE-2026-88815
1. 是否受影响:受影响
漏洞本质:sql_type_cast_svpv 处理 SQL_NUMERIC 时直接把 SV 的字符串指针和长度传给 grok_number,未先字符串化 IV/NV 型 SV,导致错误转换。定位证据(Step 4 源码影响性分析):该函数定义于 DBI-1.652/DBI.xs:1923(全源码树唯一 C 实现,另经 DBIXS.h:468 函数指针暴露),其 SQL_NUMERIC 分支(DBI.xs:1961)仍保留漏洞代码 grok_flags = grok_number(SvPVX(sv), SvCUR(sv), &uv);,且修复模式 char *p = SvPV(sv, len); 在该函数中不存在,说明补丁未被预先应用,漏洞代码存在于本版本源码,需要修复。
分支状态:
- master(1.652):受影响
2. 修复补丁
上游社区已提供修复补丁:
- https://github.com/perl5-dbi/dbi/commit/e5ad87e5602da995d28b4d65df222368b58d6702.patch
- https://github.com/perl5-dbi/dbi/commit/ff4f1baf0389dfa5e7282e1d8d7423c1b5e06b76.patch
3. 补丁适配情况
已对两个补丁完成适配并应用:
[原补丁] backport-CVE-2026-88815-1.patch(已适配,置信度 high)
- 冲突原因:原补丁(上游 e5ad87e)共 5 个 hunk,其中 3 个为上游 1.654 未发布线的发布元数据(ChangeLog、dbixs_rev.h、lib/DBI/Changes.pm),与 openEuler 1.652 基线不符——baseline(DBI 1.652,2026-08-15 发布)无 1.653/1.654 条目,强行适配会伪造发布历史。
- 适配内容:2 个功能 hunk 逐字节保留、偏移 0 干净应用——DBI.xs 修复主体(@@ -1957,8 +1957,10 @@)将 SQL_NUMERIC 分支改用
SvPV(sv, len)强制字符串化并处理 magic 后再grok_number(p, len, &uv),修复 IV/NV 标量解析;t/90sql_type_cast.t(@@ -49,6 +49,22 @@)新增 7 个 IV/NV 回归测试用例。3 个元数据 hunk 按非关键文件规则丢弃:dbixs_rev.h 为 dbixs_rev.pl 自动生成的版本戳,仅经调试函数 dbixs_revision() 暴露,保留 baseline 值 652/1810 与包版本自洽;Changes.pm 为 ChangeLog 的 POD 镜像,同理。核心修复与回归测试与上游逐字节一致,修复逻辑保真。 - 落地验证:已在 master 分支打包仓库应用并提交(commit 622ad95b),补丁应用验证通过(0 失败)。
[原补丁] backport-CVE-2026-88815-2.patch(干净应用,置信度 high)
- 同 CVE 后续补丁(上游 ff4f1ba,C99 兼容),无冲突、无需适配,直接干净应用。
前置补丁:无。
4. PR 提交情况
已提交 PR:
──────── 复制以下内容回填 issue ────────
受影响版本排查(受影响/不受影响):
1.master(1.652): 受影响
ABI 变化:否
原因说明:
1.正常修复
────────────────────────────────────────


/branches master openEuler-22.03-LTS-SP4 openEuler-20.03-LTS-SP4 /patch_url https://github.com/perl5-dbi/dbi/commit/e5ad87e5602da995d28b4d65df222368b58d6702.patch https://github.com/perl5-dbi/dbi/commit/ff4f1baf0389dfa5e7282e1d8d7423c1b5e06b76.patch /name hugel /email 2712504175@qq.com


【任务 #20 · openEuler-20.03-LTS-SP4】CVE-2026-88815
一、是否受影响
结论:受影响。CVE-2026-88815 所述漏洞函数 sql_type_cast_svpv 在本分支源码中精确定位(Step 4 源码影响性分析):DBI-1.643/DBI.xs:1943 定义,其 case SQL_NUMERIC 分支(DBI.xs:1978)中 DBI.xs:1981 仍存在漏洞代码 grok_flags = grok_number(SvPVX(sv), SvCUR(sv), &uv);——将 SV 的原始字符串指针/长度直接传给 grok_number 而未先字符串化 IV/NV,与 CVE 描述逐字吻合,且修复代码(char *p = SvPV(sv, len);)尚未存在,需要修复。
- openEuler-20.03-LTS-SP4(1.643):受影响
二、是否有修复补丁
有,上游社区补丁:
- https://github.com/perl5-dbi/dbi/commit/e5ad87e5602da995d28b4d65df222368b58d6702.patch
- https://github.com/perl5-dbi/dbi/commit/ff4f1baf0389dfa5e7282e1d8d7423c1b5e06b76.patch
三、补丁适配情况
存在适配,两个补丁均已落地:
[原补丁] backport-CVE-2026-88815-1.patch(状态:已适配,置信度:高)
- 冲突原因:原补丁基于上游 1.654-dev,与 1.643 存在差异——ChangeLog 与 lib/DBI/Changes.pm 在 1.643 中不存在(上游 1.65x 将变更日志拆分/重命名而来),dbixs_rev.h 修订号体系完全不同,测试文件排版亦不同。
- 适配内容:DBI.xs 核心 CVE 修复(SQL_NUMERIC case 改用 SvPV 强制字符串化后再 grok_number)git apply 直接成功、逐字节保留,实际落点 DBI.xs:1977-1984;t/90sql_type_cast.t 仅调整 hunk 行号(49→44)与 4 行上下文(折行排版、
unless ($pp)→if (!$pp)),新增 16 行 IV/NV 数字字面量回归测试逐字节保留,插入点与上游语义一致,核心修复逻辑保真。 - 落地验证:已真实应用到 source_dir 工作区,git apply 干净成功,git diff --stat:DBI.xs 4 +++-、t/90sql_type_cast.t 16 +++++(2 files changed, 19 insertions(+), 1 deletion(-))。
- 逐文件处置:
- DBI.xs:未改动,核心安全修复 hunk 直接应用,+/- 行与原补丁逐字节一致
- t/90sql_type_cast.t:上下文适配(排版差异、unless→if、行号 49→44,插入点语义一致)
- ChangeLog:丢弃(1.643 baseline 不存在该文件,changelog 由顶层 Changes 承担,纯 changelog 无安全逻辑)
- dbixs_rev.h:丢弃(dbixs_rev.pl 生成的构建期修订号元数据,baseline 修订号体系与补丁期望完全不同,无安全逻辑)
- lib/DBI/Changes.pm:丢弃(1.643 的 lib/DBI/ 下不存在,纯 changelog 无安全逻辑)
[原补丁] backport-CVE-2026-88815-2.patch(状态:干净应用,置信度:高)
无冲突,git apply 直接成功。
四、是否提交 PR
已提交 PR(openEuler-20.03-LTS-SP4):https://gitcode.com/src-openeuler/perl-DBI/merge_requests/93
──────── 复制以下内容回填 issue ────────
受影响版本排查(受影响/不受影响):
1.openEuler-20.03-LTS-SP4(1.643): 受影响
ABI 变化:否
原因说明:
1.正常修复
────────────────────────────────────────


【任务 #20 · master】CVE-2026-88815
1. 是否受影响:受影响
sql_type_cast_svpv(DBI-1.652/DBI.xs:1923)的 SQL_NUMERIC 分支(DBI.xs:1958-1961)将未字符串化的 IV/NV 数值 SV 的字符串指针与长度(SvPVX/SvCUR)直接传给 grok_number,正是 CVE 描述的漏洞模式;修复代码(SvPV 强制字符串化)尚未存在于源码(全树 grep 零命中),且 1.652 < 1.654 处于受影响版本范围。以上为 Step 4 源码影响性分析结论。
分支状态:
- master(1.652):受影响
2. 修复补丁
- https://github.com/perl5-dbi/dbi/commit/e5ad87e5602da995d28b4d65df222368b58d6702.patch
- https://github.com/perl5-dbi/dbi/commit/ff4f1baf0389dfa5e7282e1d8d7423c1b5e06b76.patch
3. 补丁适配情况(存在适配)
- backport-CVE-2026-88815-1.patch(已适配,置信度 high)
- 冲突原因:原补丁基于上游 1.654 dev 版本,baseline 为 1.652 发布版;5 个 hunk 中 3 个版本元数据 hunk(ChangeLog、dbixs_rev.h、lib/DBI/Changes.pm)因 baseline 中不存在 1.653/1.654 版本条目而冲突。
- 适配内容:安全修复主体 DBI.xs(SQL_NUMERIC 分支改用 SvPV 强制字符串化以处理 magic/IV/NV)与回归测试 t/90sql_type_cast.t(新增 8 个用例)两个 hunk 与 baseline 上下文完全一致、逐字节原样保留,核心修复逻辑保真;ChangeLog 与 lib/DBI/Changes.pm 将修复条目追加为 1.652 版本条目最后一项,不改动已发布的版本号/日期行;dbixs_rev.h 时间戳逐字采用补丁原文,DBIXS_REVISION 按原补丁"+1 递增”语义由 1810 改为 1811,DBIXS_VERSION 保持 652 不变。
- 落地验证:适配后补丁已在 pristine baseline 副本上
git apply --check验证通过,并已应用到源码工作区(git diff --stat:5 files changed, 26 insertions(+), 3 deletions(-))。
- backport-CVE-2026-88815-2.patch(干净应用,置信度 high)
4. PR 提交情况
──────── 复制以下内容回填 issue ────────
受影响版本排查(受影响/不受影响):
1.master(1.652): 受影响
ABI 变化:否
原因说明:
1.正常修复
────────────────────────────────────────


【任务 #20 · openEuler-22.03-LTS-SP4】CVE-2026-88815
1. 是否受影响:受影响
漏洞函数 sql_type_cast_svpv 定义于 DBI.xs:1943,SQL_NUMERIC 分支直接传 SV 字符串指针/长度的漏洞代码 grok_number(SvPVX(sv), SvCUR(sv), &uv) 精确存在于 DBI.xs:1981(核心 hunk 全部上下文行逐字匹配,仅行号偏移约 +20),修复未预先应用,本版本源码存在漏洞代码,需要修复(Step 4 源码影响性分析判为 NEEDS_ADAPTATION)。
- openEuler-22.03-LTS-SP4(1.643):受影响
2. 修复补丁:
- https://github.com/perl5-dbi/dbi/commit/e5ad87e5602da995d28b4d65df222368b58d6702.patch
- https://github.com/perl5-dbi/dbi/commit/ff4f1baf0389dfa5e7282e1d8d7423c1b5e06b76.patch
3. 补丁适配情况:已适配(无前置补丁)
[原补丁] backport-CVE-2026-88815-1.patch(已适配,置信度 high)
- 冲突原因:上游补丁基于 DBI 1.654(2026),目标分支为 1.643(2012):测试文件排版不同,ChangeLog 与 lib/DBI/Changes.pm 在 1.643 不存在、dbixs_rev.h 内容不同,整补丁无法直接应用。
- 适配内容:DBI.xs 核心 CVE 修复(SQL_NUMERIC 分支改用 SvPV(sv, len) 强制字符串化,替代裸 SvPVX/SvCUR 读取)经 git apply --check 原样应用,仅行号偏移 +20;t/90sql_type_cast.t 仅重写 6 行上下文行对齐 baseline 排版(hunk 头 @@ -49,6 → @@ -44,6),16 行核心测试 + 行逐字节一致;跳过 3 个纯 changelog/版本戳 hunk(无安全逻辑)。核心修复逻辑保真。
- 落地验证:适配结果落地为 commit 48cbdfa(baseline 0e4964d 之上),git diff --stat 为 2 files changed, 19 insertions(+), 1 deletion(-);最终补丁对 pristine baseline(git archive 0e4964d)git apply --check 通过。
冲突项明细: - t/90sql_type_cast.t(context_adjusted):上游 1.654 将 @tests 重排为列对齐 + 双引号风格、尾随上下文 if (!pp),baseline 为旧排版 + 单引号 + if (!$pp);适配仅替换 6 行上下文行,核心 16 行逐字节原样插入。
- ChangeLog(跳过):1.643 无此文件(顶层 Changes 为 POD 格式、无 1.65x 条目),原补丁改写 1.654 dev entry 日期无诚实对应值;纯元数据、无安全逻辑。
- dbixs_rev.h(跳过):baseline 为 2012 年版本戳(DBIXS_REVISION 15349,无 DBIXS_RELEASE/DBIXS_VERSION 行),补丁针对 2026 年 1832→1833 递增无对应值;该宏仅被只读暴露、全树无一致性校验,跳过不影响安全修复。
- lib/DBI/Changes.pm(跳过):该文件在 1.643 中不存在(变更记录在顶层 Changes);纯文档元数据、无安全逻辑。
[原补丁] backport-CVE-2026-88815-2.patch:干净应用(applied_clean),无需适配。
4. PR:已提交
- openEuler-22.03-LTS-SP4:https://gitcode.com/src-openeuler/perl-DBI/merge_requests/95
──────── 复制以下内容回填 issue ────────
受影响版本排查(受影响/不受影响):
1.openEuler-22.03-LTS-SP4(1.643): 受影响
ABI 变化:否
原因说明:
1.正常修复
────────────────────────────────────────


/branches openEuler-24.03-LTS-SP1 openEuler-24.03-LTS-SP3 /patch_url https://github.com/perl5-dbi/dbi/commit/e5ad87e5602da995d28b4d65df222368b58d6702.patch https://github.com/perl5-dbi/dbi/commit/ff4f1baf0389dfa5e7282e1d8d7423c1b5e06b76.patch /name hugel /email 2712504175@qq.com


【任务 #20 · openEuler-24.03-LTS-SP3】CVE-2026-88815
1. 是否受影响:受影响
漏洞函数 sql_type_cast_svpv()(DBI.xs:1943)的 SQL_NUMERIC 分支直接读取 SV 的原始字符串指针/长度传入 grok_number,漏洞行 grok_number(SvPVX(sv), SvCUR(sv), &uv) 逐字存在于 DBI.xs:1981(核心 hunk 全部上下文行完全匹配,仅行号偏移 +20,dry-run 验证通过),1.643 在 NVD 受影响版本列表内且修复未预置,需要修复(Step 4 源码影响性分析判为 NEEDS_ADAPTATION)。
- openEuler-24.03-LTS-SP3(1.643):受影响
2. 修复补丁:
- https://github.com/perl5-dbi/dbi/commit/e5ad87e5602da995d28b4d65df222368b58d6702.patch
- https://github.com/perl5-dbi/dbi/commit/ff4f1baf0389dfa5e7282e1d8d7423c1b5e06b76.patch
3. 补丁适配情况:已适配(无前置补丁)
[原补丁] backport-CVE-2026-88815-1.patch(已适配,置信度 high)
- 冲突原因:上游补丁基于 DBI 1.654 的文件布局与格式,目标分支为 1.643:ChangeLog 与 lib/DBI/Changes.pm 在 1.643 中不存在(变更日志在根目录 Changes)、dbixs_rev.h 版本戳格式不同、测试文件格式已被上游重排,整补丁无法直接应用。
- 适配内容:DBI.xs 核心 CVE 修复(SQL_NUMERIC 分支改用 SvPV(sv,len) 强制字符串化并处理 magic,替代直接读 SvPVX/SvCUR)git apply --check 直接通过,原样保留零改动;t/90sql_type_cast.t 仅将前置/尾随上下文行对齐 baseline 旧排版(hunk 头 @@ -49,6 +49,22 @@ → @@ -44,6 +44,22 @@),新增 16 行 IV/NV 数值字面量回归测试经 diff 逐字节比对与原补丁完全一致;跳过 ChangeLog、lib/DBI/Changes.pm、dbixs_rev.h 3 个非关键文件(纯变更日志/自动生成版本戳,无安全逻辑)。核心修复逻辑保真。
- 落地验证:适配后已 commit 到 source_dir,git diff --stat HEAD~1 = 2 files changed, 19 insertions(+), 1 deletion(-),git apply --check --reverse 验证补丁与源码状态一致,perl -c 语法检查通过。
[原补丁] backport-CVE-2026-88815-2.patch:干净应用(applied_clean,置信度 high),无需适配。
4. PR:已提交
- openEuler-24.03-LTS-SP3:https://gitcode.com/src-openeuler/perl-DBI/merge_requests/99
──────── 复制以下内容回填 issue ────────
受影响版本排查(受影响/不受影响):
1.openEuler-24.03-LTS-SP3(1.643): 受影响
ABI 变化:否
原因说明:
1.正常修复
────────────────────────────────────────


【任务 #20 · openEuler-24.03-LTS-SP1】CVE-2026-88815
1. 是否受影响:受影响
Step 4 源码影响性分析确认漏洞代码存在于本分支源码:漏洞函数 sql_type_cast_svpv 定义于 DBI.xs:1943,CVE 点名的 case SQL_NUMERIC 分支位于 DBI.xs:1978,漏洞模式 grok_number(SvPVX(sv), SvCUR(sv), &uv) 原样存在于 DBI.xs:1981(与补丁删除行逐字符一致,1.643 尚未修复;1.643 亦在 NVD 受影响版本列表内),需要修复。
- openEuler-24.03-LTS-SP1(1.643):受影响
2. 修复补丁
- https://github.com/perl5-dbi/dbi/commit/e5ad87e5602da995d28b4d65df222368b58d6702.patch
- https://github.com/perl5-dbi/dbi/commit/ff4f1baf0389dfa5e7282e1d8d7423c1b5e06b76.patch
3. 补丁适配情况:存在适配(无前置补丁)
[原补丁] backport-CVE-2026-88815-1.patch(已适配,置信度 high)
- 冲突原因:原补丁基于上游 DBI 1.654,目标分支为 1.643,跨版本差异导致整补丁无法直接套用:ChangeLog 与 lib/DBI/Changes.pm 在 1.643 不存在(变更记录在顶层 Changes),dbixs_rev.h 为 Makefile.PL 自动生成的版本戳,测试文件排版亦与上游不同。
- 适配内容:DBI.xs 核心 hunk(SQL_NUMERIC 分支先 SvPV(sv,len) 强制字符串化再 grok_number,修复 IV/NV 无有效 PV 时误用 SvPVX 读未初始化缓冲)与源码 1977-1984 逐字符匹配,原样逐字节应用,仅行号重锚 @@ -1957→-1977;t/90sql_type_cast.t 的 16 行 IV/NV 回归测试逐字节保留,仅上下文行适配 1.643 两行式测试排版;丢弃 3 个纯 changelog/版本戳 hunk(零安全关键词命中,版本戳会被构建过程再生成)。新测试所需常量均已存在于 baseline,无需内联。核心修复逻辑保真。
- 落地验证:适配改动已提交 source_dir(commit 07d2f68,2 files changed, +19/-1),并经 baseline 3472e35 临时 worktree git apply --check + apply + git diff --stat 验证通过。
[原补丁] backport-CVE-2026-88815-2.patch:干净应用(applied_clean),无需适配。
4. PR:已提交
- openEuler-24.03-LTS-SP1:https://gitcode.com/src-openeuler/perl-DBI/merge_requests/100
──────── 复制以下内容回填 issue ────────
受影响版本排查(受影响/不受影响):
1.openEuler-24.03-LTS-SP1(1.643): 受影响
ABI 变化:N/A
原因说明:
1.正常修复
────────────────────────────────────────


影响性分析说明:DBI versions before 1.654 for Perl incorrectly treat numeric values as strings in sql_type_cast_svpv.When casting to SQL_NUMERIC, sql_type_cast_svpv passes the string pointer and length of the SV to grok_number without stringifying it first. An integer (IV) or floating-point (NV) value has no valid string pointer, so grok_number reads from an invalid address, triggering a segmentation fault.This is reachable in Perl using the sql_type_cast function: my $num = 42; DBI::sql_type_cast( $num, DBI::SQL_NUMERIC, 0 );
openEuler评分:
6.2
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
受影响版本排查(受影响/不受影响):
1.master(1.652):受影响
2.openEuler-20.03-LTS-SP4(1.643):受影响
3.openEuler-22.03-LTS-SP4(1.643):受影响
4.openEuler-24.03-LTS-Next(1.648):受影响
5.openEuler-24.03-LTS-SP1(1.643):受影响
6.openEuler-24.03-LTS-SP3(1.643):受影响
7.openEuler-24.03-LTS-SP4(1.648):受影响
修复是否涉及abi变化(是/否):
1.master(1.652):否
2.openEuler-20.03-LTS-SP4(1.643):否
3.openEuler-22.03-LTS-SP4(1.643):否
4.openEuler-24.03-LTS-Next(1.648):否
5.openEuler-24.03-LTS-SP1(1.643):否
6.openEuler-24.03-LTS-SP3(1.643):否
7.openEuler-24.03-LTS-SP4(1.648):否
原因说明:
1.master(1.652):正常修复
2.openEuler-20.03-LTS-SP4(1.643):正常修复
3.openEuler-22.03-LTS-SP4(1.643):正常修复
4.openEuler-24.03-LTS-Next(1.648):正常修复
5.openEuler-24.03-LTS-SP1(1.643):正常修复
6.openEuler-24.03-LTS-SP3(1.643):正常修复
7.openEuler-24.03-LTS-SP4(1.648):正常修复


@shinwell_hu 经过 cve-manager 解析, 已分析的内容如下表所示:
| 状态 | 分析项目 | 内容 |
|---|---|---|
| 已分析 | 1.影响性分析说明 | DBI versions before 1.654 for Perl incorrectly treat numeric values as strings in sql_type_cast_svpv.When casting to SQL_NUMERIC, sql_type_cast_svpv passes the string pointer and length of the SV to grok_number without stringifying it first. An integer (IV) or floating-point (NV) value has no valid string pointer, so grok_number reads from an invalid address, triggering a segmentation fault.This is reachable in Perl using the sql_type_cast function: my $num = 42; DBI::sql_type_cast( $num, DBI::SQL_NUMERIC, 0 ); |
| 已分析 | 2.openEulerScore | 6.2 |
| 已分析 | 3.openEulerVector | AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| 已分析 | 4.受影响版本排查 | master:受影响,openEuler-20.03-LTS-SP4:受影响,openEuler-22.03-LTS-SP4:受影响,openEuler-24.03-LTS-Next:受影响,openEuler-24.03-LTS-SP1:受影响,openEuler-24.03-LTS-SP3:受影响,openEuler-24.03-LTS-SP4:受影响 |
| 已分析 | 5.是否涉及abi变化 | master:否,openEuler-20.03-LTS-SP4:否,openEuler-22.03-LTS-SP4:否,openEuler-24.03-LTS-Next:否,openEuler-24.03-LTS-SP1:否,openEuler-24.03-LTS-SP3:否,openEuler-24.03-LTS-SP4:否 |
| 已分析 | 6.原因说明 | master:正常修复,openEuler-20.03-LTS-SP4:正常修复,openEuler-22.03-LTS-SP4:正常修复,openEuler-24.03-LTS-Next:正常修复,openEuler-24.03-LTS-SP1:正常修复,openEuler-24.03-LTS-SP3:正常修复,openEuler-24.03-LTS-SP4:正常修复 |
请确认分析内容的准确性, 确认无误后, 您可以进行后续步骤, 否则您可以继续分析.


经过cve-manager解析,所有PR均已合入


经过cve-manager解析,所有PR均已合入


一、漏洞信息
漏洞编号:CVE-2026-88815
漏洞归属组件:perl-DBI
漏洞归属的版本:1.643,1.646,1.647,1.648,1.651,1.652
CVSS评分:
BaseScore:6.2 Medium
Vector:CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
漏洞简述:
DBI versions before 1.654 for Perl incorrectly treat numeric values as strings in sql_type_cast_svpv.When casting to SQL_NUMERIC, sql_type_cast_svpv passes the string pointer and length of the SV to grok_number without stringifying it first. An integer (IV) or floating-point (NV) value has no valid string pointer, so grok_number reads from an invalid address, triggering a segmentation fault.This is reachable in Perl using the sql_type_cast function: my $num = 42; DBI::sql_type_cast( $num, DBI::SQL_NUMERIC, 0 );
漏洞公开时间:2026-09-29 01:17:52
漏洞创建时间:2026-09-29 04:58:00
漏洞详情参考链接:
https://nvd.nist.gov/vuln/detail/CVE-2026-88815
更多参考(点击展开)
漏洞分析指导链接:
https://atomgit.com/openeuler/cve-manager/blob/master/cve-vulner-manager/doc/md/manual.md
漏洞数据来源:
七彩瞬析开源风险感知平台
漏洞补丁信息:
详情(点击展开)
二、漏洞分析结构反馈
影响性分析说明:
DBI versions before 1.654 for Perl incorrectly treat numeric values as strings in sql_type_cast_svpv.When casting to SQL_NUMERIC, sql_type_cast_svpv passes the string pointer and length of the SV to grok_number without stringifying it first. An integer (IV) or floating-point (NV) value has no valid string pointer, so grok_number reads from an invalid address, triggering a segmentation fault.This is reachable in Perl using the sql_type_cast function: my $num = 42; DBI::sql_type_cast( $num, DBI::SQL_NUMERIC, 0 );
openEuler评分:
6.2
Vector:CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
受影响版本排查(受影响/不受影响):
1.master(1.652):受影响
2.openEuler-20.03-LTS-SP4(1.643):受影响
3.openEuler-22.03-LTS-SP4(1.643):受影响
4.openEuler-24.03-LTS-Next(1.648):受影响
5.openEuler-24.03-LTS-SP1(1.643):受影响
6.openEuler-24.03-LTS-SP3(1.643):受影响
7.openEuler-24.03-LTS-SP4(1.648):受影响
修复是否涉及abi变化(是/否):
1.master(1.652):否
2.openEuler-20.03-LTS-SP4(1.643):否
3.openEuler-22.03-LTS-SP4(1.643):否
4.openEuler-24.03-LTS-Next(1.648):否
5.openEuler-24.03-LTS-SP1(1.643):否
6.openEuler-24.03-LTS-SP3(1.643):否
7.openEuler-24.03-LTS-SP4(1.648):否
原因说明:
1.master(1.652):正常修复
2.openEuler-20.03-LTS-SP4(1.643):正常修复
3.openEuler-22.03-LTS-SP4(1.643):正常修复
4.openEuler-24.03-LTS-Next(1.648):正常修复
5.openEuler-24.03-LTS-SP1(1.643):正常修复
6.openEuler-24.03-LTS-SP3(1.643):正常修复
7.openEuler-24.03-LTS-SP4(1.648):正常修复