Crash in unserialize()
未关闭
还没有人认领这个 Issue。
Bug
Status: Verified
- 主要语言
- C
- 星标
- 40.4k
- 派生
- 8.1k
- 平均合并
- 2 天 13 小时
- 30 天内合并 PR
- 96
描述
Description
Originally reported by @calysteon.
<?php
class Trigger {
public function __destruct() {
@unserialize('i:1;');
}
}
$payload = 'a:1019:{';
for ($i = 0; $i < 1017; $i++) {
$payload .= "i:$i;s:1:\"A\";";
}
// Entry that overflows into a second var_entries block
$payload .= 'i:1017;O:7:"Trigger":0:{}';
// Duplicate key overwrites Trigger, pushing it to dtor list (refcount stays at 1)
$payload .= 'i:1017;i:0;}';
$result = @unserialize($payload);
PHP Version
-
Operating System
No response
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先运行提供的 PHP 复现程序并跟踪 unserialize() 入口点,包括示例中所示的触发析构函数的行为。完成标准是此 payload 不再导致 PHP 崩溃,并且该回归问题已由适当的测试覆盖。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- c, php
- 领域
- backend
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 48/100