From 6ee0afac1c72c8e92dcd0384090ead62d5e0cf8a Mon Sep 17 00:00:00 2001 From: Julien Lepiller Date: Mon, 27 Feb 2017 11:09:11 +0100 Subject: [PATCH 1/2] gnu: gd: Fix an issue with XBM decoding. * gnu/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch: New file. * gnu/local.scm (dist_patch_DATA): Add it. * gnu/packages/gd.scm (gd)[source]: Use it. --- gnu/local.mk | 1 + gnu/packages/gd.scm | 3 +- .../patches/gd-php-73968-Fix-109-XBM-reading.patch | 114 +++++++++++++++++++++ 3 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch diff --git a/gnu/local.mk b/gnu/local.mk index 3d9ad70..271d2c4 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -582,6 +582,7 @@ dist_patch_DATA = \ %D%/packages/patches/gd-fix-tests-on-i686.patch \ %D%/packages/patches/gd-fix-truecolor-format-correction.patch \ %D%/packages/patches/gd-freetype-test-failure.patch \ + %D%/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch \ %D%/packages/patches/gegl-CVE-2012-4433.patch \ %D%/packages/patches/geoclue-config.patch \ %D%/packages/patches/ghc-dont-pass-linker-flags-via-response-files.patch \ diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm index 8cac242..664e653 100644 --- a/gnu/packages/gd.scm +++ b/gnu/packages/gd.scm @@ -52,7 +52,8 @@ "1rp4v7n1dq38b92kl7gkvpvqqkw7nvdfnz6d5kip5klkxfki6zqk")) (patches (search-patches "gd-fix-gd2-read-test.patch" "gd-fix-tests-on-i686.patch" - "gd-freetype-test-failure.patch")))) + "gd-freetype-test-failure.patch" + "gd-php-73968-Fix-109-XBM-reading.patch")))) (build-system gnu-build-system) (arguments `(#:phases diff --git a/gnu/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch b/gnu/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch new file mode 100644 index 0000000..bfaa4ff --- /dev/null +++ b/gnu/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch @@ -0,0 +1,114 @@ +From 082c5444838ea0d84f9fb6441aefdb44d78d9bba Mon Sep 17 00:00:00 2001 +From: "Christoph M. Becker" +Date: Fri, 20 Jan 2017 22:48:20 +0100 +Subject: [PATCH] Fix #109: XBM reading fails with printed error + +When calculating the number of required bytes of an XBM image, we have +to take the line padding into account. + +This patch has been taken from the gd repository and binary files have been +removed from the patch because our patch procedure doesn't support that format. +--- + src/gd_xbm.c | 2 +- + tests/xbm/CMakeLists.txt | 1 + + tests/xbm/Makemodule.am | 5 ++++- + tests/xbm/github_bug_109.c | 35 +++++++++++++++++++++++++++++++++++ + tests/xbm/github_bug_109.xbm | 5 +++++ + 5 files changed, 47 insertions(+), 2 deletions(-) + create mode 100644 tests/xbm/github_bug_109.c + create mode 100644 tests/xbm/github_bug_109.xbm + create mode 100644 tests/xbm/github_bug_109_exp.png + +diff --git a/src/gd_xbm.c b/src/gd_xbm.c +index 5f09b56..c2ba2ad 100644 +--- a/src/gd_xbm.c ++++ b/src/gd_xbm.c +@@ -108,7 +108,7 @@ BGD_DECLARE(gdImagePtr) gdImageCreateFromXbm(FILE * fd) + max_bit = 32768; + } + if (max_bit) { +- bytes = (width * height / 8) + 1; ++ bytes = (width + 7) / 8 * height; + if (!bytes) { + return 0; + } +diff --git a/tests/xbm/CMakeLists.txt b/tests/xbm/CMakeLists.txt +index 183cf5e..08576e0 100644 +--- a/tests/xbm/CMakeLists.txt ++++ b/tests/xbm/CMakeLists.txt +@@ -1,4 +1,5 @@ + LIST(APPEND TESTS_FILES ++ github_bug_109 + github_bug_170 + ) + +diff --git a/tests/xbm/Makemodule.am b/tests/xbm/Makemodule.am +index ba1eabd..0f5beb6 100644 +--- a/tests/xbm/Makemodule.am ++++ b/tests/xbm/Makemodule.am +@@ -1,5 +1,8 @@ + libgd_test_programs += \ ++ xbm/github_bug_109 \ + xbm/github_bug_170 + + EXTRA_DIST += \ +- xbm/CMakeLists.txt ++ xbm/CMakeLists.txt \ ++ xbm/github_bug_109.xbm \ ++ xbm/github_bug_109_exp.png +diff --git a/tests/xbm/github_bug_109.c b/tests/xbm/github_bug_109.c +new file mode 100644 +index 0000000..1a020c6 +--- /dev/null ++++ b/tests/xbm/github_bug_109.c +@@ -0,0 +1,35 @@ ++/** ++ * Test reading of XBM images with a width that is not a multiple of 8 ++ * ++ * We're reading such an XBM image, and check that we got what we've expected, ++ * instead of an error message. ++ * ++ * See also . ++ */ ++ ++ ++#include "gd.h" ++#include "gdtest.h" ++ ++ ++int main() ++{ ++ gdImagePtr im; ++ FILE *fp; ++ char *path; ++ ++ fp = gdTestFileOpen2("xbm", "github_bug_109.xbm"); ++ im = gdImageCreateFromXbm(fp); ++ fclose(fp); ++ gdTestAssert(im != NULL); ++ gdTestAssert(gdImageGetTrueColorPixel(im, 0, 0) == 0); ++ gdTestAssert(gdImageGetTrueColorPixel(im, 0, 1) == 0xffffff); ++ ++ path = gdTestFilePath2("xbm", "github_bug_109_exp.png"); ++ gdAssertImageEqualsToFile(path, im); ++ gdFree(path); ++ ++ gdImageDestroy(im); ++ ++ return gdNumFailures(); ++} +diff --git a/tests/xbm/github_bug_109.xbm b/tests/xbm/github_bug_109.xbm +new file mode 100644 +index 0000000..f427d86 +--- /dev/null ++++ b/tests/xbm/github_bug_109.xbm +@@ -0,0 +1,5 @@ ++#define test_width 10 ++#define test_height 10 ++static unsigned char test_bits[] = { ++ 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, ++ 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00}; + +-- +2.7.4 + -- 2.7.4