guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/05: gnu: gd: Fix an issue with XBM decoding.


From: Leo Famulari
Subject: 01/05: gnu: gd: Fix an issue with XBM decoding.
Date: Fri, 3 Mar 2017 14:28:02 -0500 (EST)

lfam pushed a commit to branch core-updates
in repository guix.

commit e8293ef12cd3df77f4111163fa5ac554480d134b
Author: Julien Lepiller <address@hidden>
Date:   Mon Feb 27 11:09:11 2017 +0100

    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.
    
    Signed-off-by: Leo Famulari <address@hidden>
---
 gnu/local.mk                                       |   1 +
 gnu/packages/gd.scm                                |   3 +-
 .../patches/gd-php-73968-Fix-109-XBM-reading.patch | 121 +++++++++++++++++++++
 3 files changed, 124 insertions(+), 1 deletion(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index abb1b04..5765a3f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -583,6 +583,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 ea13540..62c8fd8 100644
--- a/gnu/packages/gd.scm
+++ b/gnu/packages/gd.scm
@@ -53,7 +53,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
       ;; As recommended by github.com/libgd/libgd/issues/278 to fix rounding
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..a926c14
--- /dev/null
+++ b/gnu/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch
@@ -0,0 +1,121 @@
+This bug was first reported to php on https://bugs.php.net/bug.php?id=73968.
+php then reported it to gd in https://github.com/libgd/libgd/issues/109.
+
+Patch adapted from upstream source repository:
+
+https://github.com/libgd/libgd/commit/082c5444838ea0d84f9fb6441aefdb44d78d9bba
+
+Binary diffs have been removed from the patch because our patch
+procedure doesn't support them.
+
+From 082c5444838ea0d84f9fb6441aefdb44d78d9bba Mon Sep 17 00:00:00 2001
+From: "Christoph M. Becker" <address@hidden>
+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.
+---
+ 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 <https://github.com/libgd/libgd/issues/109>.
++ */
++
++
++#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
+



reply via email to

[Prev in Thread] Current Thread [Next in Thread]