php / php/php-src

Failing tests with external libgd

未关闭
#11,252 5 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

Bug Extension: gd Status: Verified
主要语言
C
星标
40.4k
派生
8.2k
平均合并
2 天 15 小时
30 天内合并 PR
103

描述

Description

I was experimenting with using the system gd for our Gentoo package, and noticed a bunch of test failures:

Bug #38212 (Seg Fault on invalid imagecreatefromgd2part() parameters) [ext/gd/tests/bug38212-mb.phpt]
Bug #38212 (Seg Fault on invalid imagecreatefromgd2part() parameters) [ext/gd/tests/bug38212.phpt]
Bug #39780 (PNG image with CRC/data error raises a fatal error) [ext/gd/tests/bug39780_extern.phpt]
Bug #41442 (imagegd2() under output control) [ext/gd/tests/bug41442.phpt]
Bug #43073 (TrueType bounding box is wrong for angle<>0) [ext/gd/tests/bug43073.phpt]
Bug #45799 (imagepng() crashes on empty image). [ext/gd/tests/bug45799.phpt]
Bug #48732 (TTF Bounding box wrong for letters below baseline) [ext/gd/tests/bug48732-mb.phpt]
Bug #48732 (TTF Bounding box wrong for letters below baseline) [ext/gd/tests/bug48732.phpt]
Bug #48801 (Problem with imagettfbbox) [ext/gd/tests/bug48801-mb.phpt]
Bug #48801 (Problem with imagettfbbox) [ext/gd/tests/bug48801.phpt]
Bug #53504 imagettfbbox/imageftbbox gives incorrect values for bounding box [ext/gd/tests/bug53504.phpt]
Bug #65148 (imagerotate may alter image dimensions) [ext/gd/tests/bug65148.phpt]
Bug #66356 (Heap Overflow Vulnerability in imagecrop()) [ext/gd/tests/bug66356.phpt]
Bug #71912 (libgd: signedness vulnerability) [ext/gd/tests/bug71912-mb.phpt]
Bug #71912 (libgd: signedness vulnerability) [ext/gd/tests/bug71912.phpt]
Bug #72339 Integer Overflow in _gd2GetHeader() resulting in heap overflow [ext/gd/tests/bug72339.phpt]
Bug #73155 (imagegd2() writes wrong chunk sizes on boundaries) [ext/gd/tests/bug73155.phpt]
Bug #73157 (imagegd2() ignores 3rd param if 4 are given) [ext/gd/tests/bug73157.phpt]
Bug #73159 (imagegd2(): unrecognized formats may result in corrupted files) [ext/gd/tests/bug73159.phpt]
Bug #73161 (imagecreatefromgd2() may leak memory) [ext/gd/tests/bug73161.phpt]
Bug #73272 (imagescale() is not affected by, but affects imagesetinterpolation()) [ext/gd/tests/bug73272.phpt]
Bug 73868 (DOS vulnerability in gdImageCreateFromGd2Ctx()) [ext/gd/tests/bug73868.phpt]
Bug #73869 (Signed Integer Overflow gd_io.c) [ext/gd/tests/bug73869.phpt]
Bug #77272 (imagescale() may return image resource on failure) [ext/gd/tests/bug77272.phpt]
Bug #77479 (imagewbmp() segfaults with very large image) [ext/gd/tests/bug77479.phpt]
Bug #77973 (Uninitialized read in gdImageCreateFromXbm) [ext/gd/tests/bug77973.phpt]
Bug #79676 (imagescale adds black border with IMG_BICUBIC) [ext/gd/tests/bug79676.phpt]
Test max colors for a gd image. [ext/gd/tests/crafted_gd2.phpt]
imagecreatefromgd2 [ext/gd/tests/createfromgd2.phpt]
imagecreatefromwbmp with invalid wbmp [ext/gd/tests/createfromwbmp2_extern.phpt]
gif --> gd1/gd2 conversion test [ext/gd/tests/gif2gd.phpt]
imagegd() writes truecolor images without palette conversion [ext/gd/tests/imagegd_truecolor.phpt]
imagegetinterpolation() and imagesetinterpolation() basic test [ext/gd/tests/imageinterpolation_basic.phpt]
Scale images and preserve aspect ratio [ext/gd/tests/imagescale_preserve_ratio.phpt]
jpeg <--> gd1/gd2 conversion test [ext/gd/tests/jpg2gd-mb.phpt]
jpeg <--> gd1/gd2 conversion test [ext/gd/tests/jpg2gd.phpt]
libgd #86 (Possible infinite loop in imagecreatefrompng) [ext/gd/tests/libgd00086_extern.phpt]
png <--> gd1/gd2 conversion test [ext/gd/tests/png2gd.phpt]
xpm --> gd1/gd2 conversion test [ext/gd/tests/xpm2gd.phpt]

These fall into a few classes, some more difficult than others.

  1. Tests using the "gd" image format. The "gd" format was removed from libgd-2.3.3 (https://github.com/libgd/libgd/blob/master/CHANGELOG.md#233---2021-09-12). I think most of these tests are obsolete and can simply be deleted.
  2. Tests where the output is slightly different. For example, bug45799.phpt is looking for Warning: imagepng(): gd-png error: no colors in palette in %s on line %d but gets Warning: imagepng(): gd-png error: no colors in palette\n in %s on line %d. These tests could be made to support both outputs.
  3. Fundamental behavior changes that never made it upstream. I'm not sure how many of these there are, or how important they are, but they're obviously the hard ones to fix. Less important ones might simply be dropped; but useful ones should probably go upstream.
PHP Version

git master

Operating System

No response

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

首先使用外部 libgd 运行列出的 ext/gd/tests,并将失败分为已移除的 gd-format 测试、输出差异和根本性的行为变化。检查受影响的 .phpt 文件,从 bug45799.phpt 和 gd 转换测试开始,然后确定哪些测试可以移除、哪些测试可以接受两种输出,或哪些测试需要上游修复。完成的标准是:外部 libgd 测试集中的每个失败都有明确的处理方案。

由索引模型根据 Issue 内容生成。

评估

技术栈
c, php
领域
backend, testing-qa
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
需要澄清
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。