1845c2a436
* gnu/packages/php.scm: New file. * gnu/packages/patches/gd-fix-chunk-size-on-boundaries.patch: New file. * gnu/packages/patches/gd-fix-truecolor-format-correction.patch: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add php. (dist_patch_DATA): Add gd patches. Co-authored-by: Marius Bakke <mbakke@fastmail.com>
96 lines
2.8 KiB
Diff
96 lines
2.8 KiB
Diff
This fixes PHP bug #73159: https://bugs.php.net/bug.php?id=73159
|
|
|
|
Patch lifted from upstream source repository:
|
|
|
|
https://github.com/libgd/libgd/commit/e1f61a4141d2e0937a13b8bfb1992b9f29eb05f5
|
|
|
|
From e1f61a4141d2e0937a13b8bfb1992b9f29eb05f5 Mon Sep 17 00:00:00 2001
|
|
From: "Christoph M. Becker" <cmbecker69@gmx.de>
|
|
Date: Mon, 15 Aug 2016 17:49:40 +0200
|
|
Subject: [PATCH] Fix #289: Passing unrecognized formats to gdImageGd2 results
|
|
in corrupted files
|
|
|
|
We must not apply the format correction twice for truecolor images.
|
|
|
|
(cherry picked from commit 09090c125658e23a4ae2a2e002646bb7278bd89e)
|
|
---
|
|
src/gd_gd2.c | 2 +-
|
|
tests/gd2/CMakeLists.txt | 1 +
|
|
tests/gd2/Makemodule.am | 1 +
|
|
tests/gd2/bug_289.c | 33 +++++++++++++++++++++++++++++++++
|
|
4 files changed, 36 insertions(+), 1 deletion(-)
|
|
create mode 100644 tests/gd2/bug_289.c
|
|
|
|
diff --git a/src/gd_gd2.c b/src/gd_gd2.c
|
|
index 86c881e..75e5e1f 100644
|
|
--- a/src/gd_gd2.c
|
|
+++ b/src/gd_gd2.c
|
|
@@ -918,7 +918,7 @@ _gdImageGd2 (gdImagePtr im, gdIOCtx * out, int cs, int fmt)
|
|
/* Force fmt to a valid value since we don't return anything. */
|
|
/* */
|
|
if ((fmt != GD2_FMT_RAW) && (fmt != GD2_FMT_COMPRESSED)) {
|
|
- fmt = im->trueColor ? GD2_FMT_TRUECOLOR_COMPRESSED : GD2_FMT_COMPRESSED;
|
|
+ fmt = GD2_FMT_COMPRESSED;
|
|
};
|
|
if (im->trueColor) {
|
|
fmt += 2;
|
|
diff --git a/tests/gd2/CMakeLists.txt b/tests/gd2/CMakeLists.txt
|
|
index 8aecacc..3b650ad 100644
|
|
--- a/tests/gd2/CMakeLists.txt
|
|
+++ b/tests/gd2/CMakeLists.txt
|
|
@@ -1,4 +1,5 @@
|
|
SET(TESTS_FILES
|
|
+ bug_289
|
|
gd2_empty_file
|
|
gd2_im2im
|
|
gd2_null
|
|
diff --git a/tests/gd2/Makemodule.am b/tests/gd2/Makemodule.am
|
|
index 754a284..b8ee946 100644
|
|
--- a/tests/gd2/Makemodule.am
|
|
+++ b/tests/gd2/Makemodule.am
|
|
@@ -1,4 +1,5 @@
|
|
libgd_test_programs += \
|
|
+ gd2/bug_289 \
|
|
gd2/gd2_empty_file \
|
|
gd2/php_bug_72339 \
|
|
gd2/gd2_read_corrupt
|
|
diff --git a/tests/gd2/bug_289.c b/tests/gd2/bug_289.c
|
|
new file mode 100644
|
|
index 0000000..ad311e9
|
|
--- /dev/null
|
|
+++ b/tests/gd2/bug_289.c
|
|
@@ -0,0 +1,33 @@
|
|
+/**
|
|
+ * Passing an unrecognized format to gdImageGd2() should result in
|
|
+ * GD2_FMT_TRUECOLOR_COMPRESSED for truecolor images.
|
|
+ *
|
|
+ * See <https://github.com/libgd/libgd/issues/289>.
|
|
+ */
|
|
+
|
|
+#include "gd.h"
|
|
+#include "gdtest.h"
|
|
+
|
|
+
|
|
+#define GD2_FMT_UNRECOGNIZED 0
|
|
+#define GD2_FMT_TRUECOLOR_COMPRESSED 4
|
|
+
|
|
+#define MSG "expected %s byte to be %d, but got %d\n"
|
|
+
|
|
+
|
|
+int main()
|
|
+{
|
|
+ gdImagePtr im;
|
|
+ char *buffer;
|
|
+ int size;
|
|
+
|
|
+ im = gdImageCreateTrueColor(10, 10);
|
|
+ gdTestAssert(im != NULL);
|
|
+ buffer = (char *) gdImageGd2Ptr(im, 128, GD2_FMT_UNRECOGNIZED, &size);
|
|
+ gdTestAssert(buffer != NULL);
|
|
+ gdImageDestroy(im);
|
|
+ gdTestAssertMsg(buffer[12] == 0, MSG, "1st", 0, buffer[12]);
|
|
+ gdTestAssertMsg(buffer[13] == GD2_FMT_TRUECOLOR_COMPRESSED, MSG, "2nd", GD2_FMT_TRUECOLOR_COMPRESSED, buffer[13]);
|
|
+
|
|
+ return gdNumFailures();
|
|
+}
|