#1930·stb

stb_image: 在动画 GIF 多帧分配中发生整数溢出 (layers * stride)

作者: AsafMeizner创建于 2026年4月10日更新于 2026年9月8日

说明

在“stbi load gif main” (`sb image.h', 第6965-7024行)中,动画GIF加载器在用于缓冲分配的“平面上”乘法中有一个整数外溢。

每个框架的尺寸在第一个框架( " stbi-mad3 sizes-valid " 第6790行)外溢时得到验证。 然而,第6994行和第7010行的多框架堆积 " 层 " 未经验证。

层'和走'都是`int'。 随着帧数的增加,它们的产物会溢出.

** 经测试的口径:** 总部,承诺`28d546d'

QQ 受影响的代码

页:1 //stb image.h:6991 (英语). strip = g.w * g.h * 4; // 在第一帧验证一次

//stb image.h:6994 (重排路径) 空 *tmp = STBI REALLOC SIZED(出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出 //^^^^^^^^^^^^^^. // 无溢出检查

//stb image.h:7010 (malloc路径) 互联网档案馆的存檔,存档日期2013-12-21. 出处= (stbi uc *)stbi malloc(层 * stread); //^^^^^^^^^^^^^^. // 无溢出检查


QQ 触发值

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|.
500x500 $1 000 000 $2 148 $
===============================================================================================================================================================================================================================================================
100×100×40,000×53,687××

一个有2,148帧的500x500动画GIF在现实世界内容(游戏图案,电影图案,屏幕录音)范围内.

影响

** 64-bit:** 过量流出负“int”符号扩展为巨大的“ small t”, maloc 返回 NULL, 被错误检查所捕获。 安全( 仅做) 。

**32-位:**整数溢出是未定义的行为. 在装有包装的典型编译器上,分配可能缩小,而随后的第7021行的 " memcpy " 则写出完整的 " stride " 字节 -- -- 堆积缓冲溢出。

建议改正

使用现有的安全函数在乘法前添加溢出验证 :

页:1
++层;
stride = g.w * g.h * 4.

// 添加此检查 :
如果 (! stbi mad2 sizes valid( 层, stride, 0)) {
返回 stbi  load gif main outomem( &g,出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

既适用于商场路径(7010行)又适用于再现路径(6994行).