diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2020-04-10 03:40:48 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2020-04-10 03:40:48 +0000 |
commit | 503c0227622254c0ae3209a1fa72bcb68bb450bc (patch) | |
tree | 48df20533f300f819504c15af33cdc03fc386a93 /Build/source/libs/gd/libgd-src/tests | |
parent | a9d86b73ecf95b83666e16c4d90e348c4958a63b (diff) |
libgd 2.3.0
git-svn-id: svn://tug.org/texlive/trunk@54636 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/gd/libgd-src/tests')
195 files changed, 2203 insertions, 679 deletions
diff --git a/Build/source/libs/gd/libgd-src/tests/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/CMakeLists.txt index 7eef4bf46eb..c99fe21457c 100644 --- a/Build/source/libs/gd/libgd-src/tests/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/CMakeLists.txt @@ -1,4 +1,3 @@ - if (BUILD_TEST) SET(DART_TESTING_TIMEOUT 5) @@ -28,15 +27,21 @@ if (BUILD_TEST) gdimageclone gdimagecolor gdimagecolorclosest + gdimagecolorclosesthwb gdimagecolordeallocate gdimagecolorexact + gdimagecolormatch gdimagecolorreplace gdimagecolorresolve gdimagecolortransparent + gdimagecompare gdimagecontrast gdimageconvolution gdimagecopy + gdimagecopymerge + gdimagecopymergegray gdimagecopyresampled + gdimagecopyresized gdimagecopyrotated gdimagecreate gdimagecrop @@ -49,6 +54,7 @@ if (BUILD_TEST) gdimagefilltoborder gdimagefilter gdimageflip + gdimageellipse gdimagegrayscale gdimageline gdimagenegate @@ -59,15 +65,22 @@ if (BUILD_TEST) gdimagerotate gdimagescale gdimagescatterex + gdimagesetinterpolationmethod gdimagesetpixel + gdimagesquaretocircle + gdimagestring + gdimagestring16 gdimagestringft gdimagestringftex + gdimagestringup + gdimagestringup16 gdimagetruecolortopalette gdinterpolatedscale gdnewfilectx gdtest gdtiled gdtransformaffineboundingbox + gdtransformaffinecopy gif jpeg png diff --git a/Build/source/libs/gd/libgd-src/tests/Makefile.am b/Build/source/libs/gd/libgd-src/tests/Makefile.am index 5f8b624bc1c..f342ceb088b 100644 --- a/Build/source/libs/gd/libgd-src/tests/Makefile.am +++ b/Build/source/libs/gd/libgd-src/tests/Makefile.am @@ -23,15 +23,21 @@ include gdimagebrightness/Makemodule.am include gdimageclone/Makemodule.am include gdimagecolor/Makemodule.am include gdimagecolorclosest/Makemodule.am +include gdimagecolorclosesthwb/Makemodule.am include gdimagecolordeallocate/Makemodule.am include gdimagecolorexact/Makemodule.am +include gdimagecolormatch/Makemodule.am include gdimagecolorreplace/Makemodule.am include gdimagecolorresolve/Makemodule.am include gdimagecolortransparent/Makemodule.am +include gdimagecompare/Makemodule.am include gdimagecontrast/Makemodule.am include gdimageconvolution/Makemodule.am include gdimagecopy/Makemodule.am +include gdimagecopymerge/Makemodule.am +include gdimagecopymergegray/Makemodule.am include gdimagecopyresampled/Makemodule.am +include gdimagecopyresized/Makemodule.am include gdimagecopyrotated/Makemodule.am include gdimagecreate/Makemodule.am include gdimagecrop/Makemodule.am @@ -44,6 +50,7 @@ include gdimagefilledrectangle/Makemodule.am include gdimagefilltoborder/Makemodule.am include gdimagefilter/Makemodule.am include gdimageflip/Makemodule.am +include gdimageellipse/Makemodule.am include gdimagegrayscale/Makemodule.am include gdimageline/Makemodule.am include gdimagenegate/Makemodule.am @@ -54,15 +61,22 @@ include gdimagerectangle/Makemodule.am include gdimagerotate/Makemodule.am include gdimagescale/Makemodule.am include gdimagescatterex/Makemodule.am +include gdimagesetinterpolationmethod/Makemodule.am include gdimagesetpixel/Makemodule.am +include gdimagesquaretocircle/Makemodule.am +include gdimagestring/Makemodule.am +include gdimagestring16/Makemodule.am include gdimagestringft/Makemodule.am include gdimagestringftex/Makemodule.am +include gdimagestringup/Makemodule.am +include gdimagestringup16/Makemodule.am include gdimagetruecolortopalette/Makemodule.am include gdinterpolatedscale/Makemodule.am include gdnewfilectx/Makemodule.am include gdtest/Makemodule.am include gdtiled/Makemodule.am include gdtransformaffineboundingbox/Makemodule.am +include gdtransformaffinecopy/Makemodule.am include gif/Makemodule.am include jpeg/Makemodule.am include png/Makemodule.am diff --git a/Build/source/libs/gd/libgd-src/tests/bmp/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/bmp/CMakeLists.txt index 8f2a88f9753..0cc1d067b93 100644 --- a/Build/source/libs/gd/libgd-src/tests/bmp/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/bmp/CMakeLists.txt @@ -1,13 +1,9 @@ LIST(APPEND TESTS_FILES bmp_null bug00275 -) - -IF(PNG_FOUND) -LIST(APPEND TESTS_FILES + bug00450 bmp_im2im bug00276 ) -ENDIF(PNG_FOUND) ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/bmp/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/bmp/Makemodule.am index f3f1660e9ce..e7908f34c38 100644 --- a/Build/source/libs/gd/libgd-src/tests/bmp/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/bmp/Makemodule.am @@ -1,12 +1,10 @@ libgd_test_programs += \ bmp/bmp_null \ - bmp/bug00275 - -if HAVE_LIBPNG -libgd_test_programs += \ + bmp/bug00275 \ + bmp/bug00450 \ bmp/bmp_im2im \ bmp/bug00276 -endif EXTRA_DIST += \ + bmp/bug00450.bmp \ bmp/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/bmp/bug00275.c b/Build/source/libs/gd/libgd-src/tests/bmp/bug00275.c index 710c084c877..775d8495dd5 100644 --- a/Build/source/libs/gd/libgd-src/tests/bmp/bug00275.c +++ b/Build/source/libs/gd/libgd-src/tests/bmp/bug00275.c @@ -6,7 +6,7 @@ #ifdef __GNUC__ -#define UNUSED __attribute__((unused)) +#define UNUSED __attribute__((__unused__)) #else #define UNUSED #endif @@ -49,5 +49,7 @@ int main() /* "save" the image as BMP */ gdImageBmpCtx(im, &ctx, 2); + gdImageDestroy(im); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/bmp/bug00276.c b/Build/source/libs/gd/libgd-src/tests/bmp/bug00276.c index 58ca423b7ee..dd5d5131202 100644 --- a/Build/source/libs/gd/libgd-src/tests/bmp/bug00276.c +++ b/Build/source/libs/gd/libgd-src/tests/bmp/bug00276.c @@ -28,5 +28,7 @@ int main() gdImageDestroy(im_orig); gdImageDestroy(im_saved); + gdFree(data); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/bmp/bug00450.bmp b/Build/source/libs/gd/libgd-src/tests/bmp/bug00450.bmp Binary files differnew file mode 100644 index 00000000000..2db27a37f92 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/bmp/bug00450.bmp diff --git a/Build/source/libs/gd/libgd-src/tests/bmp/bug00450.c b/Build/source/libs/gd/libgd-src/tests/bmp/bug00450.c new file mode 100644 index 00000000000..e048845654f --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/bmp/bug00450.c @@ -0,0 +1,40 @@ +#include <stdio.h> + +#include "gd.h" +#include "gdtest.h" + +int main(void) { + char *path = gdTestFilePath("bmp/bug00450.bmp"); + gdImagePtr im = gdImageCreateFromFile(path); + gdTestAssert(im != NULL); + + if (im) { + char const ref[] = + "# " + "## " + "### " + "#### " + "##### " + "###### " + "####### " + "######## " + "######### " + "##########" + ; + int x, y; + + for (y = 0; y < 10; ++y) { + for (x = 0; x < 10; ++x) { + int const expected_pixel = ref[x + y * 10] == '#'; + int const actual_pixel = gdImageGetPixel(im, x, y); + gdTestAssert(expected_pixel == actual_pixel); + } + } + + gdImageDestroy(im); + } + + free(path); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/freetype/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/freetype/Makemodule.am index 312759a176f..a0dda49c5fe 100644 --- a/Build/source/libs/gd/libgd-src/tests/freetype/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/freetype/Makemodule.am @@ -1,5 +1,5 @@ if HAVE_LIBFREETYPE -if HAVE_LIBPNG +if HAVE_LIBPNG libgd_test_programs += \ freetype/bug00132 endif diff --git a/Build/source/libs/gd/libgd-src/tests/gd/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gd/CMakeLists.txt index 6053ba50826..e86c7801dcc 100644 --- a/Build/source/libs/gd/libgd-src/tests/gd/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gd/CMakeLists.txt @@ -1,13 +1,14 @@ LIST(APPEND TESTS_FILES - gd_null - gd_num_colors gd_versiontest ) -IF(PNG_FOUND) +IF(ENABLE_GD_FORMATS) LIST(APPEND TESTS_FILES + bug00383 + gd_null + gd_num_colors gd_im2im ) -ENDIF(PNG_FOUND) +ENDIF(ENABLE_GD_FORMATS) ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gd/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gd/Makemodule.am index e4a741fb9dd..4a45bc22025 100644 --- a/Build/source/libs/gd/libgd-src/tests/gd/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gd/Makemodule.am @@ -1,13 +1,15 @@ libgd_test_programs += \ - gd/gd_null \ - gd/gd_num_colors \ gd/gd_versiontest -if HAVE_LIBPNG +if ENABLE_GD_FORMATS libgd_test_programs += \ + gd/bug00383 \ + gd/gd_null \ + gd/gd_num_colors \ gd/gd_im2im endif EXTRA_DIST += \ + gd/bug00383.gd \ gd/crafted_num_colors.gd \ gd/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/gd/bug00383.c b/Build/source/libs/gd/libgd-src/tests/gd/bug00383.c new file mode 100644 index 00000000000..edcfd059456 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gd/bug00383.c @@ -0,0 +1,32 @@ +/** + * Test that invalid transparent colors can't be read + * + * We're reading a corrupt palette image in GD format, which has only a single + * palette entry, but claims that the transparent color would be 1. We check + * that the transparency is simply ignored in this case. + * + * See also <https://github.com/libgd/libgd/issues/383> + */ + + +#include "gd.h" +#include "gdtest.h" + + +int main() +{ + gdImagePtr im; + FILE *fp; + + fp = gdTestFileOpen2("gd", "bug00383.gd"); + gdTestAssert(fp != NULL); + im = gdImageCreateFromGd(fp); + gdTestAssert(im != NULL); + fclose(fp); + + gdTestAssert(gdImageGetTransparent(im) == -1); + + gdImageDestroy(im); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gd/bug00383.gd b/Build/source/libs/gd/libgd-src/tests/gd/bug00383.gd Binary files differnew file mode 100644 index 00000000000..7f8611cd76c --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gd/bug00383.gd diff --git a/Build/source/libs/gd/libgd-src/tests/gd2/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gd2/CMakeLists.txt index d60823130d8..cc188ca043d 100644 --- a/Build/source/libs/gd/libgd-src/tests/gd2/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gd2/CMakeLists.txt @@ -1,25 +1,27 @@ +IF(ENABLE_GD_FORMATS) +IF(ZLIB_FOUND) LIST(APPEND TESTS_FILES bug_289 bug00209 bug00309 bug00354 + bug00383 + createimagefromgd2part + createimagefromgd2partptr gd2_empty_file php_bug_72339 + gd2_null gd2_read_corrupt too_few_image_data -) - -IF(ZLIB_FOUND) -LIST(APPEND TESTS_FILES - gd2_null + gd2_im2im ) IF(PNG_FOUND) LIST(APPEND TESTS_FILES - gd2_im2im gd2_read ) ENDIF(PNG_FOUND) ENDIF(ZLIB_FOUND) +ENDIF(ENABLE_GD_FORMATS) ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gd2/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gd2/Makemodule.am index 9c53b85649a..5cd29e6f7f9 100644 --- a/Build/source/libs/gd/libgd-src/tests/gd2/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gd2/Makemodule.am @@ -1,29 +1,33 @@ +if ENABLE_GD_FORMATS +if HAVE_LIBZ libgd_test_programs += \ gd2/bug_289 \ gd2/bug00209 \ gd2/bug00309 \ gd2/bug00354 \ + gd2/bug00383 \ + gd2/createimagefromgd2part \ + gd2/createimagefromgd2partptr \ gd2/gd2_empty_file \ gd2/php_bug_72339 \ + gd2/gd2_null \ gd2/gd2_read_corrupt \ - gd2/too_few_image_data - -if HAVE_LIBZ -libgd_test_programs += \ - gd2/gd2_null + gd2/too_few_image_data \ + gd2/gd2_im2im if HAVE_LIBPNG libgd_test_programs += \ - gd2/gd2_im2im \ gd2/gd2_read endif endif +endif EXTRA_DIST += \ gd2/CMakeLists.txt \ gd2/bug00209.gd2 \ gd2/bug00354a.gd2 \ gd2/bug00354b.gd2 \ + gd2/bug00383.gd2 \ gd2/conv_gd2_exp.gd2 \ gd2/conv_test.gd2 \ gd2/conv_test_exp.png \ diff --git a/Build/source/libs/gd/libgd-src/tests/gd2/bug00209.c b/Build/source/libs/gd/libgd-src/tests/gd2/bug00209.c index 4379d389ccc..7904d01fcf5 100644 --- a/Build/source/libs/gd/libgd-src/tests/gd2/bug00209.c +++ b/Build/source/libs/gd/libgd-src/tests/gd2/bug00209.c @@ -8,21 +8,19 @@ * See <https://github.com/libgd/libgd/issues/209>. */ - #include "gd.h" #include "gdtest.h" - int main() { - gdImagePtr im; - FILE *fp; + gdImagePtr im; + FILE *fp; - fp = gdTestFileOpen2("gd2", "bug00209.gd2"); - gdTestAssert(fp != NULL); - im = gdImageCreateFromGd2(fp); - gdTestAssert(im == NULL); - fclose(fp); + fp = gdTestFileOpen2("gd2", "bug00209.gd2"); + gdTestAssert(fp != NULL); + im = gdImageCreateFromGd2(fp); + gdTestAssert(im == NULL); + fclose(fp); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gd2/bug00354.c b/Build/source/libs/gd/libgd-src/tests/gd2/bug00354.c index 8dc27cc5ad0..1bce091ab09 100644 --- a/Build/source/libs/gd/libgd-src/tests/gd2/bug00354.c +++ b/Build/source/libs/gd/libgd-src/tests/gd2/bug00354.c @@ -6,27 +6,25 @@ * See also <https://github.com/libgd/libgd/issues/354>. */ - #include "gd.h" #include "gdtest.h" - int main() { - gdImagePtr im; - FILE *fp; + gdImagePtr im; + FILE *fp; - fp = gdTestFileOpen2("gd2", "bug00354a.gd2"); - gdTestAssert(fp != NULL); - im = gdImageCreateFromGd2(fp); - gdTestAssert(im == NULL); - fclose(fp); + fp = gdTestFileOpen2("gd2", "bug00354a.gd2"); + gdTestAssert(fp != NULL); + im = gdImageCreateFromGd2(fp); + gdTestAssert(im == NULL); + fclose(fp); - fp = gdTestFileOpen2("gd2", "bug00354b.gd2"); - gdTestAssert(fp != NULL); - im = gdImageCreateFromGd2(fp); - gdTestAssert(im == NULL); - fclose(fp); + fp = gdTestFileOpen2("gd2", "bug00354b.gd2"); + gdTestAssert(fp != NULL); + im = gdImageCreateFromGd2(fp); + gdTestAssert(im == NULL); + fclose(fp); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gd2/bug00383.c b/Build/source/libs/gd/libgd-src/tests/gd2/bug00383.c new file mode 100644 index 00000000000..dbbf661aa58 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gd2/bug00383.c @@ -0,0 +1,32 @@ +/** + * Test that invalid transparent colors can't be read + * + * We're reading a corrupt palette image in GD2 format, which has only a single + * palette entry, but claims that the transparent color would be 1. We check + * that the transparency is simply ignored in this case. + * + * See also <https://github.com/libgd/libgd/issues/383> + */ + + +#include "gd.h" +#include "gdtest.h" + + +int main() +{ + gdImagePtr im; + FILE *fp; + + fp = gdTestFileOpen2("gd2", "bug00383.gd2"); + gdTestAssert(fp != NULL); + im = gdImageCreateFromGd2(fp); + gdTestAssert(im != NULL); + fclose(fp); + + gdTestAssert(gdImageGetTransparent(im) == -1); + + gdImageDestroy(im); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gd2/bug00383.gd2 b/Build/source/libs/gd/libgd-src/tests/gd2/bug00383.gd2 Binary files differnew file mode 100644 index 00000000000..dcb164de288 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gd2/bug00383.gd2 diff --git a/Build/source/libs/gd/libgd-src/tests/gd2/bug_289.c b/Build/source/libs/gd/libgd-src/tests/gd2/bug_289.c index ad311e93ebc..9ca03cc1ee1 100644 --- a/Build/source/libs/gd/libgd-src/tests/gd2/bug_289.c +++ b/Build/source/libs/gd/libgd-src/tests/gd2/bug_289.c @@ -29,5 +29,7 @@ int main() gdTestAssertMsg(buffer[12] == 0, MSG, "1st", 0, buffer[12]); gdTestAssertMsg(buffer[13] == GD2_FMT_TRUECOLOR_COMPRESSED, MSG, "2nd", GD2_FMT_TRUECOLOR_COMPRESSED, buffer[13]); + gdFree(buffer); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gd2/createimagefromgd2part.c b/Build/source/libs/gd/libgd-src/tests/gd2/createimagefromgd2part.c new file mode 100644 index 00000000000..0c81ba6235b --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gd2/createimagefromgd2part.c @@ -0,0 +1,35 @@ +/** + *Base test for gdImageCreateFromGd2Part() + */ +#include "gd.h" +#include "gdtest.h" +#include <stdio.h> +#include <stdlib.h> + +int main() +{ + gdImagePtr im; + FILE *p; + int expected_color = 0xffffff; + int actual_color = 0; + + p = gdTestFileOpen2("gd2", "conv_test.gd2"); + + if (!p) { + gdTestErrorMsg("failed, connot open gd2 file: conv_test.gd2"); + return 1; + } + + im = gdImageCreateFromGd2Part(p, 3, 3, 3, 3); + fclose(p); + + if (!im) { + return 1; + } + + actual_color = gdImageGetPixel(im, 2, 2); + gdImageDestroy(im); + gdTestAssert(expected_color == actual_color); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gd2/createimagefromgd2partptr.c b/Build/source/libs/gd/libgd-src/tests/gd2/createimagefromgd2partptr.c new file mode 100644 index 00000000000..e432874667f --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gd2/createimagefromgd2partptr.c @@ -0,0 +1,59 @@ +/** + * Base test for gdImageCreateFromGd2PartPtr() + */ +#include "gd.h" +#include "gdtest.h" +#include <stdio.h> + +int main() +{ + FILE *p; + gdImagePtr im, partim; + void *pg; + int size = 0; + int status = 0; + int actual_color = 0; + int expected_color = 0xffffff; + + p = gdTestFileOpen2("gd2", "conv_test.gd2"); + if (!p) { + gdTestErrorMsg("failed, cannot open gd2 file:conv_test.gd2"); + return 1; + } + + im = gdImageCreateFromGd2(p); + fclose(p); + + if (!im) { + gdTestErrorMsg("failed, cannot create gd2 file."); + return 1; + } + + pg = gdImageGd2Ptr(im, (GD2_CHUNKSIZE_MIN + GD2_CHUNKSIZE_MAX) / 2, GD2_FMT_COMPRESSED, &size); + if (!pg) { + status = 1; + goto done1; + } + + if (size <= 0) { + status = 1; + goto done0; + } + + partim = gdImageCreateFromGd2PartPtr(size, pg, 3, 3, 3, 3); + if (!partim) { + status = 1; + goto done0; + } + + actual_color = gdImageGetPixel(partim, 2, 2); + status = (expected_color == actual_color) ? 0 : 1; + gdImageDestroy(partim); + +done0: + gdFree(pg); +done1: + gdImageDestroy(im); + + return status; +} diff --git a/Build/source/libs/gd/libgd-src/tests/gd2/gd2_read.c b/Build/source/libs/gd/libgd-src/tests/gd2/gd2_read.c index 8ce8bd15d57..9f2b808255e 100644 --- a/Build/source/libs/gd/libgd-src/tests/gd2/gd2_read.c +++ b/Build/source/libs/gd/libgd-src/tests/gd2/gd2_read.c @@ -33,17 +33,18 @@ int main(int argc, char *argv[]) fp = gdTestFileOpen2("gd2", path_exp[i]); if (!fp) { gdTestErrorMsg("failed, cannot open file: %s\n", path_exp[i]); + gdImageDestroy(im); return 1; } exp = gdImageCreateFromPng(fp); if (!gdAssertImageEquals(exp, im)) { gdTestErrorMsg("image %s differs from expected result\n", path[i]); - gdImageDestroy(im); error = 1; } if (exp) { gdImageDestroy(exp); } + gdImageDestroy(im); } else { /* expected to fail */ if (im) { diff --git a/Build/source/libs/gd/libgd-src/tests/gd2/php_bug_72339.c b/Build/source/libs/gd/libgd-src/tests/gd2/php_bug_72339.c index 7ce60289ef8..8217c87c1d5 100644 --- a/Build/source/libs/gd/libgd-src/tests/gd2/php_bug_72339.c +++ b/Build/source/libs/gd/libgd-src/tests/gd2/php_bug_72339.c @@ -29,7 +29,7 @@ int main() im = gdImageCreateFromGd2(fp); fclose(fp); - + gdTestAssertMsg(im == NULL, "Image should have failed to be loaded\n"); return gdNumFailures(); diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagebrightness/basic.c b/Build/source/libs/gd/libgd-src/tests/gdimagebrightness/basic.c index 779704830f0..dfed2429970 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagebrightness/basic.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagebrightness/basic.c @@ -2,40 +2,36 @@ * Basic test for gdImageBrightness() */ - #include "gd.h" #include "gdtest.h" - static void test_brightness(int brightness); - int main() { - test_brightness(+100); - test_brightness(-100); + test_brightness(+100); + test_brightness(-100); - return gdNumFailures(); + return gdNumFailures(); } - static void test_brightness(int brightness) { - gdImagePtr im; - FILE *fp; - char basename[256]; - char *path; + gdImagePtr im; + FILE *fp; + char basename[256]; + char *path; - fp = gdTestFileOpen2("gdimagebrightness", "basic.png"); - im = gdImageCreateFromPng(fp); - fclose(fp); + fp = gdTestFileOpen2("gdimagebrightness", "basic.png"); + im = gdImageCreateFromPng(fp); + fclose(fp); - gdImageBrightness(im, brightness); + gdImageBrightness(im, brightness); - sprintf(basename, "basic%+03d.png", brightness); - path = gdTestFilePath2("gdimagebrightness", basename); - gdAssertImageEqualsToFile(path, im); - gdFree(path); + sprintf(basename, "basic%+03d.png", brightness); + path = gdTestFilePath2("gdimagebrightness", basename); + gdAssertImageEqualsToFile(path, im); + gdFree(path); - gdImageDestroy(im); + gdImageDestroy(im); } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageclone/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimageclone/CMakeLists.txt index e6ccc318a0f..662f4e966a1 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimageclone/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimageclone/CMakeLists.txt @@ -1,5 +1,6 @@ LIST(APPEND TESTS_FILES bug00300 + style ) ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageclone/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimageclone/Makemodule.am index 4b1b54c0100..51abf5c1171 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimageclone/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimageclone/Makemodule.am @@ -1,5 +1,6 @@ libgd_test_programs += \ - gdimageclone/bug00300 + gdimageclone/bug00300 \ + gdimageclone/style EXTRA_DIST += \ gdimageclone/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageclone/style.c b/Build/source/libs/gd/libgd-src/tests/gdimageclone/style.c new file mode 100644 index 00000000000..c2b246ed705 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimageclone/style.c @@ -0,0 +1,30 @@ +/** + * Cloning an image should exactly reproduce all style related data + */ + + +#include <string.h> +#include "gd.h" +#include "gdtest.h" + + +int main() +{ + gdImagePtr im, clone; + int style[] = {0, 0, 0}; + + im = gdImageCreate(8, 8); + gdImageSetStyle(im, style, sizeof(style)/sizeof(style[0])); + + clone = gdImageClone(im); + gdTestAssert(clone != NULL); + + gdTestAssert(clone->styleLength == im->styleLength); + gdTestAssert(clone->stylePos == im->stylePos); + gdTestAssert(!memcmp(clone->style, im->style, sizeof(style)/sizeof(style[0]))); + + gdImageDestroy(clone); + gdImageDestroy(im); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolor/basic.c b/Build/source/libs/gd/libgd-src/tests/gdimagecolor/basic.c index ff2fe349854..86c0aff10be 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecolor/basic.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolor/basic.c @@ -2,28 +2,26 @@ * Basic test for gdImageColor() */ - #include "gd.h" #include "gdtest.h" - int main() { - gdImagePtr im; - FILE *fp; - char *path; + gdImagePtr im; + FILE *fp; + char *path; - fp = gdTestFileOpen2("gdimagecolor", "basic.png"); - im = gdImageCreateFromPng(fp); - fclose(fp); + fp = gdTestFileOpen2("gdimagecolor", "basic.png"); + im = gdImageCreateFromPng(fp); + fclose(fp); - gdImageColor(im, 127, -127, -127, 0); + gdImageColor(im, 127, -127, -127, 0); - path = gdTestFilePath2("gdimagecolor", "basic_exp.png"); - gdAssertImageEqualsToFile(path, im); - gdFree(path); + path = gdTestFilePath2("gdimagecolor", "basic_exp.png"); + gdAssertImageEqualsToFile(path, im); + gdFree(path); - gdImageDestroy(im); + gdImageDestroy(im); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosest/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosest/CMakeLists.txt index be903abe33e..3964bfa79c0 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosest/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosest/CMakeLists.txt @@ -1,7 +1,5 @@ -IF(PNG_FOUND) LIST(APPEND TESTS_FILES gdimagecolorclosest ) -ENDIF(PNG_FOUND) ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosest/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosest/Makemodule.am index f4da8beca66..be4220412ef 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosest/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosest/Makemodule.am @@ -1,7 +1,5 @@ -if HAVE_LIBPNG libgd_test_programs += \ gdimagecolorclosest/gdimagecolorclosest -endif EXTRA_DIST += \ gdimagecolorclosest/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosesthwb/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosesthwb/CMakeLists.txt new file mode 100644 index 00000000000..7a8afdc1e89 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosesthwb/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(PNG_FOUND) +LIST(APPEND TESTS_FILES + gdImageColorClosestHWB +) +ENDIF(PNG_FOUND) + +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosesthwb/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosesthwb/Makemodule.am new file mode 100644 index 00000000000..14eddbd2395 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosesthwb/Makemodule.am @@ -0,0 +1,7 @@ +if HAVE_LIBPNG +libgd_test_programs += \ + gdimagecolorclosesthwb/gdImageColorClosestHWB +endif + +EXTRA_DIST += \ + gdimagecolorclosesthwb/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosesthwb/gdImageColorClosestHWB.c b/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosesthwb/gdImageColorClosestHWB.c new file mode 100644 index 00000000000..ab2018779fe --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolorclosesthwb/gdImageColorClosestHWB.c @@ -0,0 +1,26 @@ +/** + * Basic test for gdImageColorClosestHWB() + **/ +#include "gd.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr im; + FILE *fp; + + fp = gdTestFileOpen2("gdimageflip", "remi.png"); + im = gdImageCreateFromPng(fp); + fclose(fp); + + int result = gdImageColorClosestHWB(im, 255, 0, 255); + + if (gdTestAssert(result <= 0)) + { + gdImageDestroy(im); + return 1; + } + + gdImageDestroy(im); + return 0; +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolorexact/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagecolorexact/CMakeLists.txt index 294fe4f7c9b..029d9296495 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecolorexact/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolorexact/CMakeLists.txt @@ -1,7 +1,5 @@ -IF(PNG_FOUND) LIST(APPEND TESTS_FILES gdimagecolorexact ) -ENDIF(PNG_FOUND) ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolorexact/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagecolorexact/Makemodule.am index 835b25ed62c..74279991e65 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecolorexact/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolorexact/Makemodule.am @@ -1,7 +1,5 @@ -if HAVE_LIBPNG libgd_test_programs += \ gdimagecolorexact/gdimagecolorexact -endif EXTRA_DIST += \ gdimagecolorexact/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolormatch/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagecolormatch/CMakeLists.txt new file mode 100644 index 00000000000..857b99a278e --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolormatch/CMakeLists.txt @@ -0,0 +1,6 @@ +LIST(APPEND TESTS_FILES + cve_2019_6977 + gdimagecolormatch +) + +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolormatch/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagecolormatch/Makemodule.am new file mode 100644 index 00000000000..4ed48cec862 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolormatch/Makemodule.am @@ -0,0 +1,6 @@ +libgd_test_programs += \ + gdimagecolormatch/cve_2019_6977 \ + gdimagecolormatch/gdimagecolormatch + +EXTRA_DIST += \ + gdimagecolormatch/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolormatch/cve_2019_6977.c b/Build/source/libs/gd/libgd-src/tests/gdimagecolormatch/cve_2019_6977.c new file mode 100644 index 00000000000..fdd7af57a89 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolormatch/cve_2019_6977.c @@ -0,0 +1,25 @@ +/** + * Test for CVE-2019-6977 + */ + +#include "gd.h" + +int main() +{ + gdImagePtr im1; + gdImagePtr im2; + + im1 = gdImageCreateTrueColor(0xfff, 0xfff); + im2 = gdImageCreate(0xfff, 0xfff); + if (gdImageColorAllocate(im2, 0, 0, 0) < 0) + { + gdImageDestroy(im1); + gdImageDestroy(im2); + return 1; + } + gdImageSetPixel(im2, 0, 0, 255); + gdImageColorMatch(im1, im2); + gdImageDestroy(im1); + gdImageDestroy(im2); + return 0; +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolormatch/gdimagecolormatch.c b/Build/source/libs/gd/libgd-src/tests/gdimagecolormatch/gdimagecolormatch.c new file mode 100644 index 00000000000..f59c7691b3d --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolormatch/gdimagecolormatch.c @@ -0,0 +1,32 @@ +/** + * Basic test for gdImageColorMatch() + **/ +#include "gd.h" +#include "gdtest.h" + +int main(){ + gdImagePtr im1, im2; + + im1 = gdImageCreateTrueColor(80, 80); + im2 = gdImageCreate(80, 80); + + gdImageColorAllocate(im1, 255, 36, 74); + + gdImageColorAllocate(im2, 255, 36, 74); + gdImageColorAllocate(im2, 40, 0, 240); + gdImageColorAllocate(im2, 255, 100, 255); + gdImageColorAllocate(im2, 80, 60, 44); + + int ifMatch = gdImageColorMatch(im1, im2); + + gdImageDestroy(im1); + gdImageDestroy(im2); + + if (gdTestAssert(ifMatch != 0)) + { + gdTestErrorMsg("gdImageColorMatch failed.\n"); + return 1; + } + + return 0; +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolorreplace/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagecolorreplace/CMakeLists.txt index f2495d973ee..03bd9ebdf0a 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecolorreplace/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolorreplace/CMakeLists.txt @@ -1,7 +1,5 @@ -IF(PNG_FOUND) LIST(APPEND TESTS_FILES gdimagecolorreplace ) -ENDIF(PNG_FOUND) ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolorreplace/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagecolorreplace/Makemodule.am index a8badb05c99..3ea38e55500 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecolorreplace/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolorreplace/Makemodule.am @@ -1,7 +1,5 @@ -if HAVE_LIBPNG libgd_test_programs += \ gdimagecolorreplace/gdimagecolorreplace -endif EXTRA_DIST += \ gdimagecolorreplace/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolorreplace/gdimagecolorreplace.c b/Build/source/libs/gd/libgd-src/tests/gdimagecolorreplace/gdimagecolorreplace.c index dd3c17ee49d..102a674fe8c 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecolorreplace/gdimagecolorreplace.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolorreplace/gdimagecolorreplace.c @@ -44,22 +44,22 @@ static void run_tests(gdImagePtr im, int *error) COLOR(yellow, 0xFF, 0xFF, 0); #undef COLOR -#define CHECK_VALUE(n, expected) do { \ - if (gdTestAssert((n) == (expected)) != 1) { \ +#define CHECK_VALUE(n, expected) do { \ + if (gdTestAssert((n) == (expected)) != 1) { \ gdTestErrorMsg("%d is expected, but %d\n", expected, n);\ - *error = -1; \ - } \ + *error = -1; \ + } \ } while (0) #define CHECK_PIXEL(x, y, expected) \ - do { \ - int pix; \ - gdImageSetClip(im, 0, 0, 4, 4); \ - pix = gdImageGetPixel(im, (x), (y)); \ - if (gdTestAssert(pix == (expected)) != 1) { \ + do { \ + int pix; \ + gdImageSetClip(im, 0, 0, 4, 4); \ + pix = gdImageGetPixel(im, (x), (y)); \ + if (gdTestAssert(pix == (expected)) != 1) { \ gdTestErrorMsg("%d is expected, but %d\n", expected, pix); \ - *error = -1; \ - } \ + *error = -1; \ + } \ } while (0) c = gdImageColorAllocate(im, 0xFF, 0, 0xFF); diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolorresolve/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagecolorresolve/CMakeLists.txt index 5b553388668..a26084285d1 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecolorresolve/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolorresolve/CMakeLists.txt @@ -1,7 +1,5 @@ -IF(PNG_FOUND) LIST(APPEND TESTS_FILES gdimagecolorresolve ) -ENDIF(PNG_FOUND) ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecolorresolve/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagecolorresolve/Makemodule.am index 316484c2068..a3e944276e4 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecolorresolve/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecolorresolve/Makemodule.am @@ -1,7 +1,5 @@ -if HAVE_LIBPNG libgd_test_programs += \ gdimagecolorresolve/gdimagecolorresolve -endif EXTRA_DIST += \ gdimagecolorresolve/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecompare/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagecompare/CMakeLists.txt new file mode 100644 index 00000000000..2974a07a620 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecompare/CMakeLists.txt @@ -0,0 +1,4 @@ +LIST(APPEND TESTS_FILES + gdimagecompare +) +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecompare/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagecompare/Makemodule.am new file mode 100644 index 00000000000..b4b0ebbd62a --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecompare/Makemodule.am @@ -0,0 +1,5 @@ +libgd_test_programs += \ + gdimagecompare/gdimagecompare + +EXTRA_DIST += \ + gdimagecompare/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecompare/gdimagecompare.c b/Build/source/libs/gd/libgd-src/tests/gdimagecompare/gdimagecompare.c new file mode 100644 index 00000000000..0e8367a8095 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecompare/gdimagecompare.c @@ -0,0 +1,56 @@ +/** + * Base test for gdImageCompare() + */ + +#include "gd.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr im1; + gdImagePtr im2; + int black; + int red1, red2; + int yellow1, yellow2; + int white; + int blue; + int ret; + + im1 = gdImageCreate(128, 128); + im2 = gdImageCreateTrueColor(256, 256); + + /* Set different interlace */ + gdImageInterlace(im1, 1); + gdImageInterlace(im2, 2); + + /* Set different transparent */ + gdImageColorTransparent(im1, 10); + gdImageColorTransparent(im2, 20); + + /* Allocate different color number */ + black = gdImageColorAllocate(im1, 0, 0, 0); + red1 = gdImageColorAllocate(im1, 255, 0, 0); + yellow1 = gdImageColorAllocate(im1, 255, 255, 0); + red2 = gdImageColorAllocate(im2, 255, 0, 0); + yellow2 = gdImageColorAllocate(im2, 255, 255, 0); + white = gdImageColorAllocate(im2, 255, 255, 255); + blue = gdImageColorAllocate(im2, 0, 0, 255); + + /* Filled different color */ + gdImageFilledRectangle(im1, 0, 0, 127, 8, black); + gdImageFilledRectangle(im1, 9, 0, 127, 16, red1); + gdImageFilledRectangle(im1, 17, 0, 127, 24, yellow1); + gdImageFilledRectangle(im2, 0, 0, 127, 8, red2); + gdImageFilledRectangle(im2, 9, 0, 127, 16, yellow2); + gdImageFilledRectangle(im2, 17, 0, 127, 24, white); + gdImageFilledRectangle(im2, 25, 0, 127, 32, blue); + + ret = gdImageCompare(im1, im2); + + gdTestAssert(ret == (GD_CMP_INTERLACE | GD_CMP_TRANSPARENT | GD_CMP_TRUECOLOR | GD_CMP_SIZE_X | GD_CMP_SIZE_Y | GD_CMP_COLOR | GD_CMP_IMAGE | GD_CMP_NUM_COLORS)); + + gdImageDestroy(im1); + gdImageDestroy(im2); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecontrast/basic.c b/Build/source/libs/gd/libgd-src/tests/gdimagecontrast/basic.c index 66c17ab9fb9..ef1f44ac16b 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecontrast/basic.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecontrast/basic.c @@ -2,40 +2,36 @@ * Basic test for gdImageContrast() */ - #include "gd.h" #include "gdtest.h" - static void test_contrast(double contrast); - int main() { - test_contrast(+50.0); - test_contrast(-50.0); + test_contrast(+50.0); + test_contrast(-50.0); - return gdNumFailures(); + return gdNumFailures(); } - static void test_contrast(double contrast) { - gdImagePtr im; - FILE *fp; - char basename[256]; - char *path; + gdImagePtr im; + FILE *fp; + char basename[256]; + char *path; - fp = gdTestFileOpen2("gdimagecontrast", "basic.png"); - im = gdImageCreateFromPng(fp); - fclose(fp); + fp = gdTestFileOpen2("gdimagecontrast", "basic.png"); + im = gdImageCreateFromPng(fp); + fclose(fp); - gdImageContrast(im, contrast); + gdImageContrast(im, contrast); - sprintf(basename, "basic%+03.0f.png", contrast); - path = gdTestFilePath2("gdimagecontrast", basename); - gdAssertImageEqualsToFile(path, im); - gdFree(path); + sprintf(basename, "basic%+03.0f.png", contrast); + path = gdTestFilePath2("gdimagecontrast", basename); + gdAssertImageEqualsToFile(path, im); + gdFree(path); - gdImageDestroy(im); + gdImageDestroy(im); } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/CMakeLists.txt index 802c38220ae..dc1fc51cefb 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/CMakeLists.txt @@ -1,3 +1,5 @@ +LIST(APPEND TESTS_FILES bug00369) + IF(PNG_FOUND) LIST(APPEND TESTS_FILES basic diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/Makemodule.am index 8f65b0f36e9..df5249d4529 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/Makemodule.am @@ -1,3 +1,6 @@ +libgd_test_programs += \ + gdimageconvolution/bug00369 + if HAVE_LIBPNG libgd_test_programs += \ gdimageconvolution/basic diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/basic.c b/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/basic.c index 267a079d898..5fe308ca043 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/basic.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/basic.c @@ -2,61 +2,54 @@ * Basic test for gdImageConvolution() and related functions */ - #include "gd.h" #include "gdtest.h" - static void test_convolution(void (*convolution_func)(gdImagePtr im), const char *expected) { - gdImagePtr im; - FILE *fp; - char *path; + gdImagePtr im; + FILE *fp; + char *path; - fp = gdTestFileOpen2("gdimageconvolution", "basic.png"); - im = gdImageCreateFromPng(fp); - fclose(fp); + fp = gdTestFileOpen2("gdimageconvolution", "basic.png"); + im = gdImageCreateFromPng(fp); + fclose(fp); - convolution_func(im); + convolution_func(im); - path = gdTestFilePath2("gdimageconvolution", expected); - gdAssertImageEqualsToFile(path, im); - gdFree(path); + path = gdTestFilePath2("gdimageconvolution", expected); + gdAssertImageEqualsToFile(path, im); + gdFree(path); - gdImageDestroy(im); + gdImageDestroy(im); } - static void test_edge_detect_quick(gdImagePtr im) { - gdImageEdgeDetectQuick(im); + gdImageEdgeDetectQuick(im); } - static void test_smooth(gdImagePtr im) { - gdImageSmooth(im, 5); + gdImageSmooth(im, 5); } - static void test_emboss(gdImagePtr im) { - gdImageEmboss(im); + gdImageEmboss(im); } - static void test_mean_removal(gdImagePtr im) { - gdImageMeanRemoval(im); + gdImageMeanRemoval(im); } - int main() { - test_convolution(&test_edge_detect_quick, "basic_edge_detect_quick.png"); - test_convolution(&test_smooth, "basic_smooth.png"); - test_convolution(&test_emboss, "basic_emboss.png"); - test_convolution(&test_mean_removal, "basic_mean_removal.png"); + test_convolution(&test_edge_detect_quick, "basic_edge_detect_quick.png"); + test_convolution(&test_smooth, "basic_smooth.png"); + test_convolution(&test_emboss, "basic_emboss.png"); + test_convolution(&test_mean_removal, "basic_mean_removal.png"); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/bug00369.c b/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/bug00369.c new file mode 100644 index 00000000000..631cb7adbc1 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimageconvolution/bug00369.c @@ -0,0 +1,28 @@ +/** + * Test Issue #369 for gdImageConvolution() + */ + +#include "gd.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr im; + float matrix[3][3] = { + {1, 0, 1}, + {0, 5, 0}, + {1, 0, 0} + }; + + im = gdImageCreateTrueColor(40, 40); + gdImageAlphaBlending(im, gdEffectReplace); + gdImageFilledRectangle(im, 0, 0, 39, 39, 0x7FFFFFFF); + gdImageFilledEllipse(im, 19, 19, 20, 20, 0x00FF00); + + gdImageConvolution(im, matrix, 9, 1); + gdTestAssert(0x7F010101 == gdImageGetPixel(im, 0, 0)); + + gdImageDestroy(im); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopymerge/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagecopymerge/CMakeLists.txt new file mode 100644 index 00000000000..df9bdc67f3b --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopymerge/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(PNG_FOUND) +LIST(APPEND TESTS_FILES + gdimagecopymerge +) +ENDIF(PNG_FOUND) + +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopymerge/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagecopymerge/Makemodule.am new file mode 100644 index 00000000000..67511681117 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopymerge/Makemodule.am @@ -0,0 +1,8 @@ +if HAVE_LIBPNG +libgd_test_programs += \ + gdimagecopymerge/gdimagecopymerge +endif + +EXTRA_DIST += \ + gdimagecopymerge/CMakeLists.txt \ + gdimagecopymerge/gdimagecopymerge_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopymerge/gdimagecopymerge.c b/Build/source/libs/gd/libgd-src/tests/gdimagecopymerge/gdimagecopymerge.c new file mode 100644 index 00000000000..9f08020dd48 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopymerge/gdimagecopymerge.c @@ -0,0 +1,38 @@ +/** + * Basic test for gdImageCopyMerge() + */ +#include "gd.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr dst = NULL; + gdImagePtr src = NULL; + int error = 0; + + dst = gdImageCreate(100, 100); + src = gdImageCreate(50, 50); + + if (gdTestAssert(!dst)) { + error = 1; + goto done; + } + if (gdTestAssert(!src)) { + error = 1; + goto done; + } + + gdImageColorAllocate(src, 255, 255, 255); + gdImageColorAllocate(dst, 0, 0, 0); + gdImageCopyMerge(dst, src, 25, 25, 0, 0, 50, 50, 50); + + if (!gdAssertImageEqualsToFile("gdimagecopymerge/gdimagecopymerge_exp.png", dst)) { + error = 1; + } + +done: + gdImageDestroy(dst); + gdImageDestroy(src); + + return error; +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopymerge/gdimagecopymerge_exp.png b/Build/source/libs/gd/libgd-src/tests/gdimagecopymerge/gdimagecopymerge_exp.png Binary files differnew file mode 100644 index 00000000000..18302817297 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopymerge/gdimagecopymerge_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopymergegray/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagecopymergegray/CMakeLists.txt new file mode 100644 index 00000000000..e0656ef6a8e --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopymergegray/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(PNG_FOUND) +LIST(APPEND TESTS_FILES + gdimagecopymergegray +) +ENDIF(PNG_FOUND) + +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopymergegray/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagecopymergegray/Makemodule.am new file mode 100644 index 00000000000..6856d750579 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopymergegray/Makemodule.am @@ -0,0 +1,8 @@ +if HAVE_LIBPNG +libgd_test_programs += \ + gdimagecopymergegray/gdimagecopymergegray +endif + +EXTRA_DIST += \ + gdimagecopymergegray/CMakeLists.txt \ + gdimagecopymergegray/gdimagecopymergegray_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopymergegray/gdimagecopymergegray.c b/Build/source/libs/gd/libgd-src/tests/gdimagecopymergegray/gdimagecopymergegray.c new file mode 100644 index 00000000000..34a8923a708 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopymergegray/gdimagecopymergegray.c @@ -0,0 +1,38 @@ +/** + * Basic test for gdImageCopyMergeGray() + */ +#include "gd.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr dst = NULL; + gdImagePtr src = NULL; + int error = 0; + + dst = gdImageCreate(100, 100); + src = gdImageCreate(50, 50); + + if (gdTestAssert(!dst)) { + error = 1; + goto done; + } + if (gdTestAssert(!src)) { + error = 1; + goto done; + } + + gdImageColorAllocate(src, 255, 255, 255); + gdImageColorAllocate(dst, 0, 0, 0); + gdImageCopyMergeGray(dst, src, 25, 25, 0, 0, 50, 50, 50); + + if (!gdAssertImageEqualsToFile("gdimagecopymergegray/gdimagecopymergegray_exp.png", dst)) { + error = 1; + } + +done: + gdImageDestroy(dst); + gdImageDestroy(src); + + return error; +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopymergegray/gdimagecopymergegray_exp.png b/Build/source/libs/gd/libgd-src/tests/gdimagecopymergegray/gdimagecopymergegray_exp.png Binary files differnew file mode 100644 index 00000000000..18302817297 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopymergegray/gdimagecopymergegray_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopyresampled/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresampled/CMakeLists.txt index 4d0d66ba436..00351ca4c70 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecopyresampled/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresampled/CMakeLists.txt @@ -1,8 +1,10 @@ +LIST(APPEND TESTS_FILES + exact_alpha +) IF(PNG_FOUND) LIST(APPEND TESTS_FILES basic basic_alpha - exact_alpha bug00201 ) ENDIF(PNG_FOUND) diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopyresampled/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresampled/Makemodule.am index 5d0d714e8bb..d42eab559c2 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecopyresampled/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresampled/Makemodule.am @@ -1,8 +1,10 @@ +libgd_test_programs += \ + gdimagecopyresampled/exact_alpha + if HAVE_LIBPNG libgd_test_programs += \ gdimagecopyresampled/basic \ gdimagecopyresampled/basic_alpha \ - gdimagecopyresampled/exact_alpha \ gdimagecopyresampled/bug00201 endif diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopyresampled/bug00201.c b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresampled/bug00201.c index 053b6db3b72..0287267e6f2 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecopyresampled/bug00201.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresampled/bug00201.c @@ -48,23 +48,23 @@ int main() fp = gdTestFileOpen2("gdimagecopyresampled", "bug00201_src.png"); logo_source = gdImageCreateFromPng(fp); fclose(fp); - + logo = blank_image(SRC_WIDTH,SRC_HEIGHT); gdImageAlphaBlending(logo, 0); gdImageCopy(logo, logo_source, 0,0, 0,0, SRC_WIDTH,SRC_HEIGHT); gdImageDestroy(logo_source); - + scaled_logo = blank_image(DEST_WIDTH,DEST_HEIGHT); gdImageAlphaBlending(scaled_logo, 0); gdImageCopyResampled(scaled_logo, logo, 0,0, 0,0, 200,105, SRC_WIDTH,SRC_HEIGHT); gdImageDestroy(logo); - + layers[0] = background; layers[1] = scaled_logo; img = flatten(layers, 2, DEST_WIDTH, DEST_HEIGHT); gdImageDestroy(background); gdImageDestroy(scaled_logo); - + gdAssertImageEqualsToFile("gdimagecopyresampled/bug00201_exp.png", img); gdImageDestroy(img); return gdNumFailures(); diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopyresized/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresized/CMakeLists.txt new file mode 100644 index 00000000000..78b4fa9aab4 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresized/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(PNG_FOUND) +LIST(APPEND TESTS_FILES + gdimagecopyresized +) +ENDIF(PNG_FOUND) + +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopyresized/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresized/Makemodule.am new file mode 100644 index 00000000000..9d83e40052f --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresized/Makemodule.am @@ -0,0 +1,8 @@ +if HAVE_LIBPNG +libgd_test_programs += \ + gdimagecopyresized/gdimagecopyresized +endif + +EXTRA_DIST += \ + gdimagecopyresized/CMakeLists.txt \ + gdimagecopyresized/gdimagecopyresized_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopyresized/gdimagecopyresized.c b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresized/gdimagecopyresized.c new file mode 100644 index 00000000000..137f84b2146 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresized/gdimagecopyresized.c @@ -0,0 +1,35 @@ +/** + * add test case for gdImageCopyResized + */ + +#include "gd.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr src; + gdImagePtr dst; + gdImagePtr dst_tc; + + /* We prepare two image type: Palette and True Color */ + /* src image is white, while dst and dst_tc is black */ + src = gdImageCreate(64, 64); + gdImageColorAllocate(src, 255, 255, 255); + dst = gdImageCreate(128, 128); + gdImageColorAllocate(dst, 0, 0, 0); + dst_tc = gdImageCreateTrueColor(128, 128); + + /* Copy src to two image type separately */ + /* We copy src to the center of dst and dst_tc */ + gdImageCopyResized(dst, src, 32, 32, 0, 0, 64, 64, 64, 64); + gdImageCopyResized(dst_tc, src, 32, 32, 0, 0, 64, 64, 64, 64); + + gdAssertImageEqualsToFile("gdimagecopyresized/gdimagecopyresized_exp.png", dst); + gdAssertImageEqualsToFile("gdimagecopyresized/gdimagecopyresized_exp.png", dst_tc); + + gdImageDestroy(src); + gdImageDestroy(dst); + gdImageDestroy(dst_tc); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecopyresized/gdimagecopyresized_exp.png b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresized/gdimagecopyresized_exp.png Binary files differnew file mode 100644 index 00000000000..32fa084520a --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecopyresized/gdimagecopyresized_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecreate/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagecreate/CMakeLists.txt index 905e79c52e2..1cd0c1a6033 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecreate/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecreate/CMakeLists.txt @@ -1,4 +1,4 @@ -SET(TESTS_FILES +LIST(APPEND TESTS_FILES bug00340 ) diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecreate/bug00340.c b/Build/source/libs/gd/libgd-src/tests/gdimagecreate/bug00340.c index 14129ab8660..9c6eff3ad64 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecreate/bug00340.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecreate/bug00340.c @@ -5,29 +5,25 @@ * triggering an appropriate warning. */ - #include <string.h> #include "gd.h" #include "gd_errors.h" #include "gdtest.h" - #define MSG "product of memory allocation multiplication would exceed INT_MAX, failing operation gracefully\n" - void error_handler(int priority, const char *format, ...) { - gdTestAssert(priority == GD_WARNING); - gdTestAssert(!strcmp(format, MSG)); + gdTestAssert(priority == GD_WARNING); + gdTestAssert(!strcmp(format, MSG)); } - int main() { - gdImagePtr im; + gdImagePtr im; - im = gdImageCreate(64970, 65111); - gdTestAssert(im == NULL); + im = gdImageCreate(64970, 65111); + gdTestAssert(im == NULL); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecrop/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagecrop/CMakeLists.txt index 4b1e97e292c..43f6f6c14cd 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecrop/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecrop/CMakeLists.txt @@ -1,6 +1,10 @@ -SET(TESTS_FILES +LIST(APPEND TESTS_FILES bug00297 + bug00432 + bug00485_auto + bug00485_threshold php_bug_72494 + bug00486 ) ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecrop/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagecrop/Makemodule.am index fe73c1de929..1725f6cbc5f 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagecrop/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecrop/Makemodule.am @@ -1,5 +1,9 @@ libgd_test_programs += \ gdimagecrop/bug00297 \ + gdimagecrop/bug00432 \ + gdimagecrop/bug00485_auto \ + gdimagecrop/bug00485_threshold \ + gdimagecrop/bug00486 \ gdimagecrop/php_bug_72494 EXTRA_DIST += \ diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecrop/bug00432.c b/Build/source/libs/gd/libgd-src/tests/gdimagecrop/bug00432.c new file mode 100644 index 00000000000..d3f681f9857 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecrop/bug00432.c @@ -0,0 +1,45 @@ +/** + * Test that gdImageCrop() retains transparency + * + * We create an image with transparent pixels, crop the image, and check whether + * all pixels are identical to the respective source image. + * + * See <https://github.com/libgd/libgd/issues/432> + */ + + +#include "gd.h" +#include "gdtest.h" + + +#define WIDTH 10 +#define HEIGHT 10 +#define XOFF 1 +#define YOFF 1 + + +int main() +{ + gdImagePtr src, dst; + gdRect crop = {XOFF, YOFF, WIDTH-XOFF-1, HEIGHT-YOFF-1}; + int i, j; + + src = gdImageCreateTrueColor(WIDTH, HEIGHT); + gdImageAlphaBlending(src, gdEffectReplace); + gdImageFilledRectangle(src, 0, 0, WIDTH-1, HEIGHT-1, + gdTrueColorAlpha(gdRedMax, gdGreenMax, gdBlueMax, gdAlphaMax)); + + dst = gdImageCrop(src, &crop); + gdTestAssert(dst != NULL); + + for (i = 0; i < gdImageSX(dst); i++) { + for (j = 0; j < gdImageSY(dst); j++) { + gdTestAssert(gdImageGetPixel(dst, i, j) == gdImageGetPixel(src, i+XOFF, j+YOFF)); + } + } + + gdImageDestroy(src); + gdImageDestroy(dst); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecrop/bug00485_auto.c b/Build/source/libs/gd/libgd-src/tests/gdimagecrop/bug00485_auto.c new file mode 100644 index 00000000000..3c0627e49d8 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecrop/bug00485_auto.c @@ -0,0 +1,52 @@ +/** + * Test that gdImageCropAuto() works pixel precise + * + * We test that a single black pixel anywhere (but the corners) on an 8x8 pixel + * image with a white background is auto-cropped to a 1x1 pixel image with a + * black pixel. + * + * See <https://github.com/libgd/libgd/issues/485> + */ + + +#include "gd.h" +#include "gdtest.h" + + +gdImagePtr createWhiteImageWithBlackPixelAt(int x, int y) +{ + gdImagePtr im = gdImageCreateTrueColor(8, 8); + gdImageFilledRectangle(im, 0, 0, 7, 7, 0xffffff); + gdImageSetPixel(im, x, y, 0x000000); + return im; +} + + +int main() +{ + int x, y, height, width, color; + gdImagePtr orig, cropped; + + for (y = 0; y < 8; y++) { + for (x = 0; x < 8; x++) { + if ((x == 0 && (y == 0 || y == 7)) || (x == 7 && (y == 0 || y == 7))) { + continue; // skip the corners + } + orig = createWhiteImageWithBlackPixelAt(x, y); + cropped = gdImageCropAuto(orig, GD_CROP_SIDES); + gdTestAssertMsg(cropped != NULL, "Pixel at %d, %d: unexpected NULL crop\n", x, y); + if (cropped) { + width = gdImageSX(cropped); + gdTestAssertMsg(width == 1, "Pixel at %d, %d: unexpected width (%d)\n", x, y, width); + height = gdImageSY(cropped); + gdTestAssertMsg(height == 1, "Pixel at %d, %d: unexpected height (%d)\n", x, y, height); + color = gdImageGetPixel(cropped, 0, 0); + gdTestAssertMsg(color == 0x000000, "Pixel at %d, %d: unexpected color (%d)\n", x, y, color); + gdImageDestroy(cropped); + } + gdImageDestroy(orig); + } + } + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecrop/bug00485_threshold.c b/Build/source/libs/gd/libgd-src/tests/gdimagecrop/bug00485_threshold.c new file mode 100644 index 00000000000..31ac38f1577 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecrop/bug00485_threshold.c @@ -0,0 +1,48 @@ +/** + * Test that gdImageCropThreshold() works pixel precise + * + * We test that a single black pixel anywhere on an 8x8 pixel image with a white + * background is threshold-cropped to a 1x1 pixel image with a black pixel. + * + * See <https://github.com/libgd/libgd/issues/485> + */ + + +#include "gd.h" +#include "gdtest.h" + + +gdImagePtr createWhiteImageWithBlackPixelAt(int x, int y) +{ + gdImagePtr im = gdImageCreateTrueColor(8, 8); + gdImageFilledRectangle(im, 0, 0, 7, 7, 0xffffff); + gdImageSetPixel(im, x, y, 0x000000); + return im; +} + + +int main() +{ + int x, y, height, width, color; + gdImagePtr orig, cropped; + + for (y = 0; y < 8; y++) { + for (x = 0; x < 8; x++) { + orig = createWhiteImageWithBlackPixelAt(x, y); + cropped = gdImageCropThreshold(orig, 0xffffff, 1.0); + gdTestAssertMsg(cropped != NULL, "Pixel at %d, %d: unexpected NULL crop\n", x, y); + if (cropped) { + width = gdImageSX(cropped); + gdTestAssertMsg(width == 1, "Pixel at %d, %d: unexpected width (%d)\n", x, y, width); + height = gdImageSY(cropped); + gdTestAssertMsg(height == 1, "Pixel at %d, %d: unexpected height (%d)\n", x, y, height); + color = gdImageGetPixel(cropped, 0, 0); + gdTestAssertMsg(color == 0x000000, "Pixel at %d, %d: unexpected color (%d)\n", x, y, color); + gdImageDestroy(cropped); + } + gdImageDestroy(orig); + } + } + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagecrop/bug00486.c b/Build/source/libs/gd/libgd-src/tests/gdimagecrop/bug00486.c new file mode 100644 index 00000000000..289d88fe596 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagecrop/bug00486.c @@ -0,0 +1,48 @@ +/** + * Test that gdImageCropAuto() crops left and right as well + * + * We test that an image with four unicolored quadrants, where either both left + * quadrants or both right quadrants have the same color, but the remaining + * quadrants have different colors, are treated identically by + * gdImageCropAuto(…, GD_CROP_SIDES). + * + * See <https://github.com/libgd/libgd/issues/486> + */ + + +#include "gd.h" +#include "gdtest.h" + + +int main() +{ + gdImagePtr orig, croppedLeft, croppedRight; + int red, green, blue; + + orig = gdImageCreateTrueColor(8, 8); + red = gdImageColorAllocate(orig, 255, 0, 0); + green = gdImageColorAllocate(orig, 0, 255, 0); + blue = gdImageColorAllocate(orig, 0, 0, 255); + + gdImageFilledRectangle(orig, 0, 0, 3, 3, green); // tl + gdImageFilledRectangle(orig, 4, 0, 7, 3, red); // tr + gdImageFilledRectangle(orig, 0, 4, 3, 7, green); // bl + gdImageFilledRectangle(orig, 4, 4, 7, 7, blue); // br + croppedLeft = gdImageCropAuto(orig, GD_CROP_SIDES); + gdTestAssert(croppedLeft != NULL); + + gdImageFilledRectangle(orig, 0, 0, 3, 3, red); // tl + gdImageFilledRectangle(orig, 4, 0, 7, 3, green); // tr + gdImageFilledRectangle(orig, 0, 4, 3, 7, blue); // bl + gdImageFilledRectangle(orig, 4, 4, 7, 7, green); // br + croppedRight = gdImageCropAuto(orig, GD_CROP_SIDES); + gdTestAssert(croppedRight != NULL); + + gdAssertImageEquals(croppedRight, croppedLeft); + + gdImageDestroy(orig); + gdImageDestroy(croppedLeft); + gdImageDestroy(croppedRight); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageellipse/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimageellipse/CMakeLists.txt new file mode 100644 index 00000000000..b7d79f2cd8b --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimageellipse/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(PNG_FOUND) +LIST(APPEND TESTS_FILES + bug00169 +) +ENDIF(PNG_FOUND) + +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageellipse/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimageellipse/Makemodule.am new file mode 100644 index 00000000000..11d207902b0 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimageellipse/Makemodule.am @@ -0,0 +1,8 @@ +if HAVE_LIBPNG +libgd_test_programs += \ + gdimageellipse/bug00169 +endif + +EXTRA_DIST += \ + gdimageellipse/CMakeLists.txt \ + gdimageellipse/bug00169_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageellipse/bug00169.c b/Build/source/libs/gd/libgd-src/tests/gdimageellipse/bug00169.c new file mode 100644 index 00000000000..8246c8c6394 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimageellipse/bug00169.c @@ -0,0 +1,22 @@ +/** + * add test case for gdImageEllipse + */ + +#include "gd.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr im; + int white = 0; + + im = gdImageCreateTrueColor(2200, 2200); + white = gdImageColorAllocate(im, 255, 255, 255); + + gdImageEllipse(im, 1100, 1100, 2200, 2200, white); + gdAssertImageEqualsToFile("gdimageellipse/bug00169_exp.png", im); + + gdImageDestroy(im); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageellipse/bug00169_exp.png b/Build/source/libs/gd/libgd-src/tests/gdimageellipse/bug00169_exp.png Binary files differnew file mode 100644 index 00000000000..f844608ab8f --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimageellipse/bug00169_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefile/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagefile/Makemodule.am index df86097df95..8c9e4d53913 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefile/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefile/Makemodule.am @@ -1,9 +1,11 @@ if HAVE_LIBTIFF if HAVE_LIBWEBP +if ENABLE_GD_FORMATS libgd_test_programs += \ gdimagefile/gdnametest endif endif +endif EXTRA_DIST += \ gdimagefile/CMakeLists.txt \ diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefile/gdnametest.c b/Build/source/libs/gd/libgd-src/tests/gdimagefile/gdnametest.c index 2b3cc322c45..fcd040adbec 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefile/gdnametest.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefile/gdnametest.c @@ -11,149 +11,145 @@ #define LY (HEIGHT/2) // Line Y #define HT 2 // Half of line-thickness - -gdImagePtr mkwhite(int x, int y) +static gdImagePtr +mkwhite(int x, int y) { - gdImagePtr im; + gdImagePtr im; im = gdImageCreateTrueColor(x, y); gdImageFilledRectangle(im, 0, 0, x-1, y-1, - gdImageColorExactAlpha(im, 255, 255, 255, 0)); + gdImageColorExactAlpha(im, 255, 255, 255, 0)); - gdTestAssert(im != NULL); + gdTestAssert(im != NULL); - gdImageSetInterpolationMethod(im, GD_BICUBIC); // FP interp'n + gdImageSetInterpolationMethod(im, GD_BICUBIC); // FP interp'n - return im; + return im; }/* mkwhite*/ +static gdImagePtr +mkcross(void) +{ + gdImagePtr im; + int fg, n; -gdImagePtr mkcross() { - gdImagePtr im; - int fg, n; - - im = mkwhite(WIDTH, HEIGHT); - fg = gdImageColorAllocate(im, 0, 0, 0); + im = mkwhite(WIDTH, HEIGHT); + fg = gdImageColorAllocate(im, 0, 0, 0); - for (n = -HT; n < HT; n++) { - gdImageLine(im, LX-n, 0, LX-n, HEIGHT-1, fg); - gdImageLine(im, 0, LY-n, WIDTH-1, LY-n, fg); - }/* for */ + for (n = -HT; n < HT; n++) { + gdImageLine(im, LX-n, 0, LX-n, HEIGHT-1, fg); + gdImageLine(im, 0, LY-n, WIDTH-1, LY-n, fg); + }/* for */ - return im; + return im; }/* mkcross*/ - - - -void -do_test() { - - gdTestAssertMsg(strchr("123",'2') != 0, "strchr() is not functional.\n"); - gdTestAssertMsg(strcasecmp("123abC","123Abc") == 0, "strcasecmp() is not functional.\n"); - - int n; - struct { - const char *nm; // Filename - unsigned maxdiff; // Maximum total pixel diff - int required; // 1 -> image type always supported, -1 -> skip it - int readonly; // 1 -> gd can only read this type - } names[] = { - {"img.png", 0, 0, 0}, - {"img.gif", 5, 1, 0}, // This seems to come from tc<->palette - {"img.GIF", 5, 1, 0}, // Test for case insensitivity - {"img.gd", 0, 1, 0}, - {"img.gd2", 0, 0, 0}, - {"img.jpg", 25, 0, 0}, - {"img.jpeg", 25, 0, 0}, - {"img.wbmp", 0, 1, 0}, - {"img.bmp", 0, 1, 0}, - {"img-ref.xpm", 0, 0, 1}, - {"img-ref.xbm", 0, 1, 1}, - {"img-ref.tga", 0, 1, 1}, - {"img.webp", 10, 1, 0}, - {"img.tiff", 0, 1, 0}, - - {NULL, 0} - }; - - for (n = 0; names[n].nm; n++) { - gdImagePtr orig, copy; - int status; - char *full_filename = NULL; - unsigned int pixels; - - /* Some image readers are buggy and crash the program so we - * skip them. Bug fixers should remove these from the list of - * skipped items as bugs are fixed. */ - if (names[n].required < 0) { - printf("Skipping test for '%s'. FIX THIS!\n", names[n].nm); - continue; - }/* if */ - - /* Skip this file if the current library build doesn't support - * it. (If it's one of the built-in types, *that* a different - * problem; we assert that here.) */ - if (!gdSupportsFileType(names[n].nm, 0)) { - gdTestAssertMsg(!names[n].required, "GD doesn't support required file type: %s\n", names[n].nm); - continue; - }/* if */ - - orig = mkcross(); - - /* Write the image unless writing is not supported. */ - if (!names[n].readonly) { - /* Prepend the test directory; this is expected to be run in - * the parent dir. */ - full_filename = gdTestTempFile(names[n].nm); - status = gdImageFile(orig, full_filename); - gdTestAssertMsg(status == GD_TRUE, "Failed to create %s\n", full_filename); - } else { - /* Prepend the test directory; this is expected to be run in - * the parent dir. */ - full_filename = gdTestFilePath2("gdimagefile", names[n].nm); - }/* if */ - - copy = gdImageCreateFromFile(full_filename); - gdTestAssertMsg(!!copy, "Failed to load %s\n", full_filename); - if (!copy) continue; - - pixels = gdMaxPixelDiff(orig, copy); - gdTestAssertMsg(pixels <= names[n].maxdiff, "%u pixels different on %s\n", pixels, full_filename); - - if (!names[n].readonly) { - status = remove(full_filename); - gdTestAssertMsg(status == 0, "Failed to delete %s\n", full_filename); - }/* if */ - - free(full_filename); - gdImageDestroy(orig); - gdImageDestroy(copy); - }/* for */ +static void +do_test(void) +{ + gdTestAssertMsg(strchr("123",'2') != 0, "strchr() is not functional.\n"); + gdTestAssertMsg(strcasecmp("123abC","123Abc") == 0, "strcasecmp() is not functional.\n"); + + int n; + struct { + const char *nm; // Filename + unsigned maxdiff; // Maximum total pixel diff + int required; // 1 -> image type always supported, -1 -> skip it + int readonly; // 1 -> gd can only read this type + } names[] = { + {"img.png", 0, 0, 0}, + {"img.gif", 5, 1, 0}, // This seems to come from tc<->palette + {"img.GIF", 5, 1, 0}, // Test for case insensitivity + {"img.gd", 0, 1, 0}, + {"img.gd2", 0, 0, 0}, + {"img.jpg", 25, 0, 0}, + {"img.jpeg", 25, 0, 0}, + {"img.wbmp", 0, 1, 0}, + {"img.bmp", 0, 1, 0}, + {"img-ref.xpm", 0, 0, 1}, + {"img-ref.xbm", 0, 1, 1}, + {"img-ref.tga", 0, 1, 1}, + {"img.webp", 10, 1, 0}, + {"img.tiff", 0, 1, 0}, + + {NULL, 0} + }; + + for (n = 0; names[n].nm; n++) { + gdImagePtr orig, copy; + int status; + char *full_filename = NULL; + unsigned int pixels; + + /* Some image readers are buggy and crash the program so we + * skip them. Bug fixers should remove these from the list of + * skipped items as bugs are fixed. */ + if (names[n].required < 0) { + printf("Skipping test for '%s'. FIX THIS!\n", names[n].nm); + continue; + }/* if */ + + /* Skip this file if the current library build doesn't support + * it. (If it's one of the built-in types, *that* a different + * problem; we assert that here.) */ + if (!gdSupportsFileType(names[n].nm, 0)) { + gdTestAssertMsg(!names[n].required, "GD doesn't support required file type: %s\n", names[n].nm); + continue; + }/* if */ + + orig = mkcross(); + + /* Write the image unless writing is not supported. */ + if (!names[n].readonly) { + /* Prepend the test directory; this is expected to be run in + * the parent dir. */ + full_filename = gdTestTempFile(names[n].nm); + status = gdImageFile(orig, full_filename); + gdTestAssertMsg(status == GD_TRUE, "Failed to create %s\n", full_filename); + } else { + /* Prepend the test directory; this is expected to be run in + * the parent dir. */ + full_filename = gdTestFilePath2("gdimagefile", names[n].nm); + }/* if */ + + copy = gdImageCreateFromFile(full_filename); + gdTestAssertMsg(!!copy, "Failed to load %s\n", full_filename); + if (!copy) continue; + + pixels = gdMaxPixelDiff(orig, copy); + gdTestAssertMsg(pixels <= names[n].maxdiff, "%u pixels different on %s\n", pixels, full_filename); + + if (!names[n].readonly) { + status = remove(full_filename); + gdTestAssertMsg(status == 0, "Failed to delete %s\n", full_filename); + }/* if */ + + free(full_filename); + gdImageDestroy(orig); + gdImageDestroy(copy); + }/* for */ }/* do_test*/ +static void +do_errortest(void) +{ + gdImagePtr im; -void -do_errortest() { - gdImagePtr im; - - im = mkcross(); + im = mkcross(); - gdTestAssert(!gdImageFile(im, "img.xpng")); - gdTestAssert(!gdImageFile(im, "bobo")); - gdTestAssert(!gdImageFile(im, "png")); - gdTestAssert(!gdImageFile(im, "")); + gdTestAssert(!gdImageFile(im, "img.xpng")); + gdTestAssert(!gdImageFile(im, "bobo")); + gdTestAssert(!gdImageFile(im, "png")); + gdTestAssert(!gdImageFile(im, "")); - gdImageDestroy(im); + gdImageDestroy(im); }/* do_errortest*/ - int main() { + do_test(); + do_errortest(); - do_test(); - do_errortest(); - - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00002_1.c b/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00002_1.c index 752178a4805..3feaf42f68d 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00002_1.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00002_1.c @@ -37,4 +37,3 @@ int main() return error; } - diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00002_2.c b/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00002_2.c index 982ae8f64d4..4edcd6aca7c 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00002_2.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00002_2.c @@ -46,4 +46,3 @@ int main() gdImageDestroy(tile); return error; } - diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00002_3.c b/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00002_3.c index b11fbc91ccb..1a1929e4205 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00002_3.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00002_3.c @@ -51,4 +51,3 @@ int main() gdImageDestroy(tile); return error; } - diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00104_1.c b/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00104_1.c index 13247cab4e0..694788a5f86 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00104_1.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefill/bug00104_1.c @@ -8,26 +8,26 @@ int main() gdImagePtr im, tile; int tile_red, tile_blue; int error = 0; - + im = gdImageCreate(200, 150); tile = gdImageCreateTrueColor(2, 2); - + tile_red = gdImageColorAllocate(tile, 255, 0, 0); tile_blue = gdImageColorAllocate(tile, 0, 0, 255); - + gdImageSetPixel(tile, 0, 0, tile_red); gdImageSetPixel(tile, 1, 1, tile_red); gdImageSetPixel(tile, 1, 0, tile_blue); gdImageSetPixel(tile, 0, 1, tile_blue); - + gdImageSetTile(im, tile); gdImageFill(im, 11, 12, gdTiled); if (!gdAssertImageEqualsToFile("gdimagefill/bug00104_1_exp.png", im)) { error = 1; } - + gdImageDestroy(im); gdImageDestroy(tile); return error; diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/CMakeLists.txt index ba6d28f49a6..4042df931c2 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/CMakeLists.txt @@ -1,5 +1,6 @@ IF(PNG_FOUND) LIST(APPEND TESTS_FILES + bug00351 php_bug43828 ) ENDIF(PNG_FOUND) diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/Makemodule.am index 4af6963f86c..710c0a095ee 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/Makemodule.am @@ -1,8 +1,10 @@ if HAVE_LIBPNG libgd_test_programs += \ + gdimagefilledarc/bug00351 \ gdimagefilledarc/php_bug43828 endif EXTRA_DIST += \ gdimagefilledarc/CMakeLists.txt \ + gdimagefilledarc/bug00351_exp.png \ gdimagefilledarc/php_bug43828_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/bug00351.c b/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/bug00351.c new file mode 100644 index 00000000000..20b0fdea308 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/bug00351.c @@ -0,0 +1,30 @@ +/** + * Test drawing of pies starting and/or ending near 90° + * + * See <https://github.com/libgd/libgd/issues/351>. + */ + + +#include "gd.h" +#include "gdtest.h" + + +int main() +{ + gdImagePtr im; + int white, navy, red; + + im = gdImageCreateTrueColor(500, 500); + white = gdTrueColorAlpha(0xFF, 0xFF, 0xFF, gdAlphaOpaque); + navy = gdTrueColorAlpha(0x00, 0x00, 0x80, gdAlphaOpaque); + red = gdTrueColorAlpha(0xFF, 0x00, 0x00, gdAlphaOpaque); + + gdImageFilledArc(im, 250, 250, 500, 250, 0, 88, white, gdPie); + gdImageFilledArc(im, 250, 250, 500, 250, 88, 91 , navy, gdPie); + gdImageFilledArc(im, 250, 250, 500, 250, 91, 360 , red, gdPie); + + gdAssertImageEqualsToFile("gdimagefilledarc/bug00351_exp.png", im); + + gdImageDestroy(im); + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/bug00351_exp.png b/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/bug00351_exp.png Binary files differnew file mode 100644 index 00000000000..16b2db2623e --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilledarc/bug00351_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/CMakeLists.txt index 5fe4edd1ad4..48286e4a5ef 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/CMakeLists.txt @@ -1,6 +1,7 @@ IF(PNG_FOUND) LIST(APPEND TESTS_FILES bug00010 + bug00169 bug00191 github_bug_00238 ) diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/Makemodule.am index 6a5185a10c1..0a886868967 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/Makemodule.am @@ -1,6 +1,7 @@ if HAVE_LIBPNG libgd_test_programs += \ gdimagefilledellipse/bug00010 \ + gdimagefilledellipse/bug00169 \ gdimagefilledellipse/bug00191 \ gdimagefilledellipse/github_bug_00238 endif @@ -8,5 +9,6 @@ endif EXTRA_DIST += \ gdimagefilledellipse/CMakeLists.txt \ gdimagefilledellipse/bug00010_exp.png \ + gdimagefilledellipse/bug00169_exp.png \ gdimagefilledellipse/bug00191.png \ gdimagefilledellipse/github_bug_00238_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/bug00169.c b/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/bug00169.c new file mode 100644 index 00000000000..639e52fc767 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/bug00169.c @@ -0,0 +1,22 @@ +/** + * add test case for gdImageFilledEllipse + */ + +#include "gd.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr im; + int white = 0; + + im = gdImageCreateTrueColor(2200, 2200); + white = gdImageColorAllocate(im, 255, 255, 255); + + gdImageFilledEllipse(im, 1100, 1100, 2200, 2200, white); + gdAssertImageEqualsToFile("gdimagefilledellipse/bug00169_exp.png", im); + + gdImageDestroy(im); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/bug00169_exp.png b/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/bug00169_exp.png Binary files differnew file mode 100644 index 00000000000..db883907cdc --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/bug00169_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/github_bug_00238.c b/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/github_bug_00238.c index 499923fedd3..67c93fd551b 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/github_bug_00238.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilledellipse/github_bug_00238.c @@ -12,7 +12,7 @@ int main() goto exit; } - gdImageAlphaBlending(im, gdEffectNormal); + gdImageAlphaBlending(im, gdEffectNormal); gdImageFilledRectangle(im, 0, 0, 140, 199, gdTrueColorAlpha(0,0,0,127)); gdImageAlphaBlending(im, gdEffectAlphaBlend); diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilledpolygon/self_intersecting.c b/Build/source/libs/gd/libgd-src/tests/gdimagefilledpolygon/self_intersecting.c index ebb1404984d..f9b96dac535 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefilledpolygon/self_intersecting.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilledpolygon/self_intersecting.c @@ -3,29 +3,27 @@ * *currently* using the even-odd fillrule. */ - #include "gd.h" #include "gdtest.h" - int main() { - gdImagePtr im; - int black; - gdPoint points[] = {{50, 5}, {24, 86}, {93, 36}, {7, 36}, {76, 86}}; - char *path; + gdImagePtr im; + int black; + gdPoint points[] = {{50, 5}, {24, 86}, {93, 36}, {7, 36}, {76, 86}}; + char *path; - im = gdImageCreate(100, 100); - gdImageColorAllocate(im, 255, 255, 255); - black = gdImageColorAllocate(im, 0, 0, 0); + im = gdImageCreate(100, 100); + gdImageColorAllocate(im, 255, 255, 255); + black = gdImageColorAllocate(im, 0, 0, 0); - gdImageFilledPolygon(im, points, 5, black); + gdImageFilledPolygon(im, points, 5, black); - path = gdTestFilePath2("gdimagefilledpolygon", "self_intersecting_exp.png"); - gdAssertImageEqualsToFile(path, im); - gdFree(path); + path = gdTestFilePath2("gdimagefilledpolygon", "self_intersecting_exp.png"); + gdAssertImageEqualsToFile(path, im); + gdFree(path); - gdImageDestroy(im); + gdImageDestroy(im); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilledrectangle/bug00004.c b/Build/source/libs/gd/libgd-src/tests/gdimagefilledrectangle/bug00004.c index 594e29637d7..87e33dc3a22 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefilledrectangle/bug00004.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilledrectangle/bug00004.c @@ -24,4 +24,3 @@ int main() return 1; } } - diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilledrectangle/bug00078.c b/Build/source/libs/gd/libgd-src/tests/gdimagefilledrectangle/bug00078.c index adf244ebca2..4cde69867ee 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefilledrectangle/bug00078.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilledrectangle/bug00078.c @@ -36,4 +36,3 @@ int main() gdImageDestroy(im); return 0; } - diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilledrectangle/bug00106_gdimagefilledrectangle.c b/Build/source/libs/gd/libgd-src/tests/gdimagefilledrectangle/bug00106_gdimagefilledrectangle.c index 24f5ceb9327..a6f5c06959b 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefilledrectangle/bug00106_gdimagefilledrectangle.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilledrectangle/bug00106_gdimagefilledrectangle.c @@ -24,4 +24,3 @@ int main() return 1; } } - diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilltoborder/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagefilltoborder/CMakeLists.txt index fcf18f1a2e5..29502352ad3 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefilltoborder/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilltoborder/CMakeLists.txt @@ -1,8 +1,6 @@ -IF(PNG_FOUND) LIST(APPEND TESTS_FILES bug00037 github_bug_215 ) -ENDIF(PNG_FOUND) ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilltoborder/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagefilltoborder/Makemodule.am index fc7ed3d05d6..779bda0565b 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefilltoborder/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilltoborder/Makemodule.am @@ -1,8 +1,6 @@ -if HAVE_LIBPNG libgd_test_programs += \ gdimagefilltoborder/bug00037 \ gdimagefilltoborder/github_bug_215 -endif EXTRA_DIST += \ gdimagefilltoborder/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilltoborder/bug00037.c b/Build/source/libs/gd/libgd-src/tests/gdimagefilltoborder/bug00037.c index ab7e1b805bf..72e58b7fe64 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefilltoborder/bug00037.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilltoborder/bug00037.c @@ -27,4 +27,3 @@ int main() } } - diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefilter/gdCopyBlurred.c b/Build/source/libs/gd/libgd-src/tests/gdimagefilter/gdCopyBlurred.c index dee2f1f8d52..aec49f51eb9 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagefilter/gdCopyBlurred.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagefilter/gdCopyBlurred.c @@ -143,7 +143,7 @@ void do_crosstest() { gdImagePtr im = mkcross(); gdImagePtr blurred; - const int RADIUS = 16; + const int RADIUS = 16; gdTestAssert(!!im); diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageflip/gdimageflip.c b/Build/source/libs/gd/libgd-src/tests/gdimageflip/gdimageflip.c index a29e50e18f2..da834eeda65 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimageflip/gdimageflip.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimageflip/gdimageflip.c @@ -2,36 +2,33 @@ * Testing the basic operation of the gdImageFlip*() functions */ - #include "gd.h" #include "gdtest.h" - static void test_flip(void (BGD_STDCALL *func)(gdImagePtr), const char *filename) { - gdImagePtr im; - FILE *fp; - char *path; + gdImagePtr im; + FILE *fp; + char *path; - fp = gdTestFileOpen2("gdimageflip", "remi.png"); - im = gdImageCreateFromPng(fp); - fclose(fp); + fp = gdTestFileOpen2("gdimageflip", "remi.png"); + im = gdImageCreateFromPng(fp); + fclose(fp); - func(im); + func(im); - path = gdTestFilePath2("gdimageflip", filename); - gdAssertImageEqualsToFile(path, im); - gdFree(path); + path = gdTestFilePath2("gdimageflip", filename); + gdAssertImageEqualsToFile(path, im); + gdFree(path); - gdImageDestroy(im); + gdImageDestroy(im); } - int main() { - test_flip(gdImageFlipVertical, "gdimageflipvertical_exp.png"); - test_flip(gdImageFlipHorizontal, "gdimagefliphorizontal_exp.png"); - test_flip(gdImageFlipBoth, "gdimageflipboth_exp.png"); + test_flip(gdImageFlipVertical, "gdimageflipvertical_exp.png"); + test_flip(gdImageFlipHorizontal, "gdimagefliphorizontal_exp.png"); + test_flip(gdImageFlipBoth, "gdimageflipboth_exp.png"); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagegrayscale/basic.c b/Build/source/libs/gd/libgd-src/tests/gdimagegrayscale/basic.c index 40b4201944a..3ecc482366d 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagegrayscale/basic.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagegrayscale/basic.c @@ -2,28 +2,26 @@ * Basic test for gdImageGrayScale() */ - #include "gd.h" #include "gdtest.h" - int main() { - gdImagePtr im; - FILE *fp; - char *path; + gdImagePtr im; + FILE *fp; + char *path; - fp = gdTestFileOpen2("gdimagegrayscale", "basic.png"); - im = gdImageCreateFromPng(fp); - fclose(fp); + fp = gdTestFileOpen2("gdimagegrayscale", "basic.png"); + im = gdImageCreateFromPng(fp); + fclose(fp); - gdImageGrayScale(im); + gdImageGrayScale(im); - path = gdTestFilePath2("gdimagegrayscale", "basic_exp.png"); - gdAssertImageEqualsToFile(path, im); - gdFree(path); + path = gdTestFilePath2("gdimagegrayscale", "basic_exp.png"); + gdAssertImageEqualsToFile(path, im); + gdFree(path); - gdImageDestroy(im); + gdImageDestroy(im); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagegrayscale/bug00386.c b/Build/source/libs/gd/libgd-src/tests/gdimagegrayscale/bug00386.c index 5b6d048130a..2e68ed4d051 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagegrayscale/bug00386.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagegrayscale/bug00386.c @@ -47,5 +47,7 @@ int main() } } + gdImageDestroy(im); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageline/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimageline/CMakeLists.txt index 1f8c419a682..c345ed1426e 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimageline/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimageline/CMakeLists.txt @@ -7,6 +7,7 @@ LIST(APPEND TESTS_FILES bug00077 bug00072 bug00111 + bug00315 gdimageline_aa gdimageline_bug5 gdImageAALine_thickness @@ -14,4 +15,4 @@ LIST(APPEND TESTS_FILES ) ENDIF(PNG_FOUND) -ADD_GD_TESTS(m) +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageline/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimageline/Makemodule.am index 3b541a16a9a..9c104da2d5e 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimageline/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimageline/Makemodule.am @@ -6,6 +6,7 @@ libgd_test_programs += \ gdimageline/bug00072 \ gdimageline/bug00077 \ gdimageline/bug00111 \ + gdimageline/bug00315 \ gdimageline/gdimageline_aa \ gdimageline/gdimageline_bug5 \ gdimageline/gdImageAALine_thickness \ @@ -17,6 +18,7 @@ EXTRA_DIST += \ gdimageline/bug00072_exp.png \ gdimageline/bug00077_exp.png \ gdimageline/bug00111_exp.png \ + gdimageline/bug00315_exp.png \ gdimageline/gdimageline_aa_a_1_exp.png \ gdimageline/gdimageline_aa_b_0_exp.png \ gdimageline/gdimageline_aa_c_0_exp.png \ diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageline/bug00315.c b/Build/source/libs/gd/libgd-src/tests/gdimageline/bug00315.c new file mode 100644 index 00000000000..719d155e0ba --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimageline/bug00315.c @@ -0,0 +1,37 @@ +/** + * Regression test for <https://github.com/libgd/libgd/issues/315> + * + * We're testing that a single-pointed gdImageAALine() is drawn as a single + * non-antialized pixel, according to (two-pointed) vertical and horizontal + * lines. + */ + +#include "gd.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr im; + int white, black; + char *path; + + im = gdImageCreateTrueColor(6, 6); + white = gdImageColorAllocate(im, 255, 255, 255); + black = gdImageColorAllocate(im, 0, 0, 0); + gdImageFilledRectangle(im, 0,0, 5,5, white); + + gdImageLine(im, 4,4, 4,4, black); + gdImageLine(im, 1,4, 2,4, black); + gdImageLine(im, 4,1, 4,2, black); + + gdImageSetAntiAliased(im, black); + gdImageLine(im, 1,1, 1,1, gdAntiAliased); + + path = gdTestFilePath2("gdimageline", "bug00315_exp.png"); + gdAssertImageEqualsToFile(path, im); + gdFree(path); + + gdImageDestroy(im); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimageline/bug00315_exp.png b/Build/source/libs/gd/libgd-src/tests/gdimageline/bug00315_exp.png Binary files differnew file mode 100644 index 00000000000..a6b2d850597 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimageline/bug00315_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagenegate/basic.c b/Build/source/libs/gd/libgd-src/tests/gdimagenegate/basic.c index f8dafc8ea23..563eec60d33 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagenegate/basic.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagenegate/basic.c @@ -2,28 +2,26 @@ * Basic test for gdImageNegate() */ - #include "gd.h" #include "gdtest.h" - int main() { - gdImagePtr im; - FILE *fp; - char *path; + gdImagePtr im; + FILE *fp; + char *path; - fp = gdTestFileOpen2("gdimagenegate", "basic.png"); - im = gdImageCreateFromPng(fp); - fclose(fp); + fp = gdTestFileOpen2("gdimagenegate", "basic.png"); + im = gdImageCreateFromPng(fp); + fclose(fp); - gdImageNegate(im); + gdImageNegate(im); - path = gdTestFilePath2("gdimagenegate", "basic_exp.png"); - gdAssertImageEqualsToFile(path, im); - gdFree(path); + path = gdTestFilePath2("gdimagenegate", "basic_exp.png"); + gdAssertImageEqualsToFile(path, im); + gdFree(path); - gdImageDestroy(im); + gdImageDestroy(im); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagepixelate/gdimagepixelate.c b/Build/source/libs/gd/libgd-src/tests/gdimagepixelate/gdimagepixelate.c index 047ac8f446e..f8e6646d05b 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagepixelate/gdimagepixelate.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagepixelate/gdimagepixelate.c @@ -27,28 +27,28 @@ static const int expected_average[][3] = { } \ } while (0) -#define CHECK_PIXELS(im, expected) do { \ - int x, y; \ - for (y = 0; y < (im)->sy; y++) { \ - for (x = 0; x < (im)->sx; x++) { \ - int p = gdImageGetPixel(im, x, y); \ - int r = ((expected)[y/BLOCK_SIZE][x/BLOCK_SIZE]>>16)&0xFF; \ - int g = ((expected)[y/BLOCK_SIZE][x/BLOCK_SIZE]>> 8)&0xFF; \ - int b = ((expected)[y/BLOCK_SIZE][x/BLOCK_SIZE] )&0xFF; \ - if (r != gdImageRed(im, p)) { \ +#define CHECK_PIXELS(im, expected) do { \ + int x, y; \ + for (y = 0; y < (im)->sy; y++) { \ + for (x = 0; x < (im)->sx; x++) { \ + int p = gdImageGetPixel(im, x, y); \ + int r = ((expected)[y/BLOCK_SIZE][x/BLOCK_SIZE]>>16)&0xFF; \ + int g = ((expected)[y/BLOCK_SIZE][x/BLOCK_SIZE]>> 8)&0xFF; \ + int b = ((expected)[y/BLOCK_SIZE][x/BLOCK_SIZE] )&0xFF; \ + if (r != gdImageRed(im, p)) { \ gdTestErrorMsg("Red %x is expected, but %x\n", r, gdImageRed(im, p)); \ - return 0; \ - } \ - if (g != gdImageGreen(im, p)) { \ + return 0; \ + } \ + if (g != gdImageGreen(im, p)) { \ gdTestErrorMsg("Green %x is expected, but %x\n", g, gdImageGreen(im, p)); \ - return 0; \ - } \ - if (b != gdImageBlue(im, p)) { \ + return 0; \ + } \ + if (b != gdImageBlue(im, p)) { \ gdTestErrorMsg("Blue %x is expected, but %x\n", b, gdImageBlue(im, p)); \ - return 0; \ - } \ - } \ - } \ + return 0; \ + } \ + } \ + } \ } while (0) static int testPixelate(gdImagePtr im) diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagerectangle/github_bug_00172.c b/Build/source/libs/gd/libgd-src/tests/gdimagerectangle/github_bug_00172.c index 6519342041f..9fd18aad8f8 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagerectangle/github_bug_00172.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagerectangle/github_bug_00172.c @@ -40,13 +40,6 @@ int main() { error |=1; } } - - if (gdImageGetPixel(im, xs -1, 95) != white) { - error |=1; - } - if (gdImageGetPixel(im, xe +1, 95) != white) { - error |=1; - } gdImageDestroy(im); return error; diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagerectangle/point_ordering.c b/Build/source/libs/gd/libgd-src/tests/gdimagerectangle/point_ordering.c index b2ea4ed1735..704b3bd35b2 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagerectangle/point_ordering.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagerectangle/point_ordering.c @@ -1,7 +1,7 @@ /** * Test point ordering of gdImageRectangle() * - * We're testing the two allowed point orders with and without thickness, + * We're testing all four possible point orders with and without thickness, * and verify that all sides of the rectangle are drawn. * * See also <https://github.com/libgd/libgd/issues/177> @@ -27,10 +27,14 @@ int main() red = gdImageColorAllocate(im, 255, 0, 0); draw_and_check_rectangle(im, 10, 10, 50, 50, black, red); + draw_and_check_rectangle(im, 50, 60, 10, 100, black, red); draw_and_check_rectangle(im, 50, 150, 10, 110, black, red); + draw_and_check_rectangle(im, 10, 200, 50, 160, black, red); gdImageSetThickness(im, 4); draw_and_check_rectangle(im, 60, 10, 100, 50, black, red); + draw_and_check_rectangle(im, 100, 60, 60, 100, black, red); draw_and_check_rectangle(im, 100, 150, 60, 110, black, red); + draw_and_check_rectangle(im, 60, 200, 100, 160, black, red); #if 0 /* save image for debugging purposes */ diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagerotate/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagerotate/CMakeLists.txt index 01957c5905c..7b8ab14b35a 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagerotate/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimagerotate/CMakeLists.txt @@ -1,11 +1,6 @@ IF(PNG_FOUND) -IF(JPEG_FOUND) LIST(APPEND TESTS_FILES bug00067 -) -ENDIF(JPEG_FOUND) - -LIST(APPEND TESTS_FILES php_bug_64898 php_bug_65070 ) diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagerotate/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagerotate/Makemodule.am index 9d375f39b9e..116c851b432 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagerotate/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimagerotate/Makemodule.am @@ -1,10 +1,6 @@ if HAVE_LIBPNG -if HAVE_LIBJPEG -libgd_test_programs += \ - gdimagerotate/bug00067 -endif - libgd_test_programs += \ + gdimagerotate/bug00067 \ gdimagerotate/php_bug_64898 \ gdimagerotate/php_bug_65070 endif diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagerotate/php_bug_65070.c b/Build/source/libs/gd/libgd-src/tests/gdimagerotate/php_bug_65070.c index 0bf34a3d78e..87a43ea2e7c 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagerotate/php_bug_65070.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagerotate/php_bug_65070.c @@ -5,11 +5,9 @@ * color. */ - #include "gd.h" #include "gdtest.h" - int main() { gdImagePtr src, dst; diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagerotate/php_bug_65070_exp.png b/Build/source/libs/gd/libgd-src/tests/gdimagerotate/php_bug_65070_exp.png Binary files differindex fba85f6f06f..64b8b1095b7 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagerotate/php_bug_65070_exp.png +++ b/Build/source/libs/gd/libgd-src/tests/gdimagerotate/php_bug_65070_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagescale/bug00329.c b/Build/source/libs/gd/libgd-src/tests/gdimagescale/bug00329.c index bc505c12935..67a15618879 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagescale/bug00329.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagescale/bug00329.c @@ -6,48 +6,45 @@ * expected color. */ - #include <string.h> #include "gd.h" #include "gdtest.h" - static void test(const char *mode) { - gdImagePtr src, dst; - int expected, actual; - - if (strcmp(mode, "palette")) { - src = gdImageCreateTrueColor(100, 100); - expected = gdTrueColorAlpha(255, 255, 255, gdAlphaOpaque); - gdImageFilledRectangle(src, 0,0, 99,99, expected); - } else { - src = gdImageCreate(100, 100); - gdImageColorAllocate(src, 255, 255, 255); - expected = gdImageGetTrueColorPixel(src, 49, 49); - } - - gdImageSetInterpolationMethod(src, GD_BILINEAR_FIXED); - dst = gdImageScale(src, 200, 200); - - actual = gdImageGetPixel(dst, 0, 0); - gdTestAssertMsg(actual == expected, "%s: wrong color; expected %x, but got %x", mode, expected, actual); - actual = gdImageGetPixel(dst, 0, 199); - gdTestAssertMsg(actual == expected, "%s: wrong color; expected %x, but got %x", mode, expected, actual); - actual = gdImageGetPixel(dst, 199, 199); - gdTestAssertMsg(actual == expected, "%s: wrong color; expected %x, but got %x", mode, expected, actual); - actual = gdImageGetPixel(dst, 199, 0); - gdTestAssertMsg(actual == expected, "%s: wrong color; expected %x, but got %x", mode, expected, actual); - - gdImageDestroy(src); - gdImageDestroy(dst); + gdImagePtr src, dst; + int expected, actual; + + if (strcmp(mode, "palette")) { + src = gdImageCreateTrueColor(100, 100); + expected = gdTrueColorAlpha(255, 255, 255, gdAlphaOpaque); + gdImageFilledRectangle(src, 0,0, 99,99, expected); + } else { + src = gdImageCreate(100, 100); + gdImageColorAllocate(src, 255, 255, 255); + expected = gdImageGetTrueColorPixel(src, 49, 49); + } + + gdImageSetInterpolationMethod(src, GD_BILINEAR_FIXED); + dst = gdImageScale(src, 200, 200); + + actual = gdImageGetPixel(dst, 0, 0); + gdTestAssertMsg(actual == expected, "%s: wrong color; expected %x, but got %x", mode, expected, actual); + actual = gdImageGetPixel(dst, 0, 199); + gdTestAssertMsg(actual == expected, "%s: wrong color; expected %x, but got %x", mode, expected, actual); + actual = gdImageGetPixel(dst, 199, 199); + gdTestAssertMsg(actual == expected, "%s: wrong color; expected %x, but got %x", mode, expected, actual); + actual = gdImageGetPixel(dst, 199, 0); + gdTestAssertMsg(actual == expected, "%s: wrong color; expected %x, but got %x", mode, expected, actual); + + gdImageDestroy(src); + gdImageDestroy(dst); } - int main() { - test("palette"); - test("truecolor"); + test("palette"); + test("truecolor"); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagescale/bug00330.c b/Build/source/libs/gd/libgd-src/tests/gdimagescale/bug00330.c index 0c9d10c9139..44ba2f473fd 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagescale/bug00330.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagescale/bug00330.c @@ -5,28 +5,26 @@ * has the expected color value. */ - #include "gd.h" #include "gdtest.h" - int main() { - gdImagePtr src, dst; - int color; + gdImagePtr src, dst; + int color; - src = gdImageCreate(100, 100); - gdImageColorAllocate(src, 255, 255, 255); + src = gdImageCreate(100, 100); + gdImageColorAllocate(src, 255, 255, 255); - gdImageSetInterpolationMethod(src, GD_BILINEAR_FIXED); - dst = gdImageScale(src, 200, 200); + gdImageSetInterpolationMethod(src, GD_BILINEAR_FIXED); + dst = gdImageScale(src, 200, 200); - color = gdImageGetPixel(dst, 99, 99); - gdTestAssertMsg(color == 0xffffff, - "expected color ffffff, but got %x\n", color); + color = gdImageGetPixel(dst, 99, 99); + gdTestAssertMsg(color == 0xffffff, + "expected color ffffff, but got %x\n", color); - gdImageDestroy(src); - gdImageDestroy(dst); + gdImageDestroy(src); + gdImageDestroy(dst); - return 0; + return 0; } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagescale/bug_overflow_large_new_size.c b/Build/source/libs/gd/libgd-src/tests/gdimagescale/bug_overflow_large_new_size.c index 0a8503b745f..20cda1d03e2 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagescale/bug_overflow_large_new_size.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagescale/bug_overflow_large_new_size.c @@ -15,13 +15,14 @@ int main() return 1; } gdImageSetInterpolationMethod(im, GD_BELL); - + /* here the call may pass if the system has enough memory (physical or swap) or fails (overflow check or alloc fails. in both cases the tests pass */ im2 = gdImageScale(im,0x15555556, 1); if (im2 == NULL) { printf("gdImageScale failed, expected (out of memory or overflow validation\n"); + gdImageDestroy(im); return 0; } gdImageDestroy(im); diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagesetinterpolationmethod/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagesetinterpolationmethod/CMakeLists.txt new file mode 100644 index 00000000000..655106266cd --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagesetinterpolationmethod/CMakeLists.txt @@ -0,0 +1,5 @@ +LIST(APPEND TESTS_FILES + github_bug_00584 +) + +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagesetinterpolationmethod/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagesetinterpolationmethod/Makemodule.am new file mode 100644 index 00000000000..1b833367e5e --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagesetinterpolationmethod/Makemodule.am @@ -0,0 +1,5 @@ +libgd_test_programs += \ + gdimagesetinterpolationmethod/github_bug_00584 + +EXTRA_DIST += \ + gdimagesetinterpolationmethod/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagesetinterpolationmethod/github_bug_00584.c b/Build/source/libs/gd/libgd-src/tests/gdimagesetinterpolationmethod/github_bug_00584.c new file mode 100644 index 00000000000..e11f9f06331 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagesetinterpolationmethod/github_bug_00584.c @@ -0,0 +1,31 @@ +/** + * Test that gdImageSetInterpolationMethod(im, GD_DEFAULT) is consistent + * + * See <https://github.com/libgd/libgd/issues/584> + */ + +#include "gd.h" +#include "gdtest.h" + + +int main() +{ + gdImagePtr im; + gdInterpolationMethod old_m, new_m; + interpolation_method old_f, new_f; + + im = gdImageCreateTrueColor(8, 8); + gdTestAssert(im != NULL); + gdTestAssert(gdImageSetInterpolationMethod(im, GD_SINC)); + old_m = gdImageGetInterpolationMethod(im); + gdTestAssert(old_m == GD_SINC); + old_f = im->interpolation; + gdTestAssert(gdImageSetInterpolationMethod(im, GD_DEFAULT)); + new_m = gdImageGetInterpolationMethod(im); + gdTestAssert(new_m == GD_LINEAR); + new_f = im->interpolation; + gdTestAssert(new_m != old_m); + gdTestAssert(new_f != old_f); + gdImageDestroy(im); + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagesetpixel/alpha_blending.c b/Build/source/libs/gd/libgd-src/tests/gdimagesetpixel/alpha_blending.c index 9874df659d9..f182d59f124 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagesetpixel/alpha_blending.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagesetpixel/alpha_blending.c @@ -2,53 +2,51 @@ * Testing all effects */ - #include "gd.h" #include "gdtest.h" - int main() { - gdImagePtr im; - int effects[] = { - gdEffectReplace, gdEffectAlphaBlend, gdEffectNormal, - gdEffectOverlay, gdEffectMultiply - }; - int red[3], blue[3]; - int x, y, i, j; - char *path; - - red[0] = gdTrueColorAlpha(0, 0, 255, 127); - red[1] = gdTrueColorAlpha(0, 0, 255, 63); - red[2] = gdTrueColorAlpha(0, 0, 255, 0); - blue[0] = gdTrueColorAlpha(255, 0, 0, 127); - blue[1] = gdTrueColorAlpha(255, 0, 0, 63); - blue[2] = gdTrueColorAlpha(255, 0, 0, 0); - - im = gdImageCreateTrueColor(120, 180); - - gdImageAlphaBlending(im, gdEffectReplace); - for (j = 0; j < 3; j++) { - y = 60 * j; - gdImageFilledRectangle(im, 0,y, 119,y+59, red[j]); - } - - for (i = 0; i < 5; i++) { - x = 20 * i; - gdImageAlphaBlending(im, effects[i]); - for (j = 0; j < 9; j++) { - y = 20 * j; - gdImageFilledRectangle(im, x+20,y, x+39,y+19, blue[j % 3]); - } - } - - gdImageSaveAlpha(im, 1); - - path = gdTestFilePath2("gdimagesetpixel", "alphablending_exp.png"); - gdAssertImageEqualsToFile(path, im); - gdFree(path); - - gdImageDestroy(im); - - return gdNumFailures(); + gdImagePtr im; + int effects[] = { + gdEffectReplace, gdEffectAlphaBlend, gdEffectNormal, + gdEffectOverlay, gdEffectMultiply + }; + int red[3], blue[3]; + int x, y, i, j; + char *path; + + red[0] = gdTrueColorAlpha(0, 0, 255, 127); + red[1] = gdTrueColorAlpha(0, 0, 255, 63); + red[2] = gdTrueColorAlpha(0, 0, 255, 0); + blue[0] = gdTrueColorAlpha(255, 0, 0, 127); + blue[1] = gdTrueColorAlpha(255, 0, 0, 63); + blue[2] = gdTrueColorAlpha(255, 0, 0, 0); + + im = gdImageCreateTrueColor(120, 180); + + gdImageAlphaBlending(im, gdEffectReplace); + for (j = 0; j < 3; j++) { + y = 60 * j; + gdImageFilledRectangle(im, 0,y, 119,y+59, red[j]); + } + + for (i = 0; i < 5; i++) { + x = 20 * i; + gdImageAlphaBlending(im, effects[i]); + for (j = 0; j < 9; j++) { + y = 20 * j; + gdImageFilledRectangle(im, x+20,y, x+39,y+19, blue[j % 3]); + } + } + + gdImageSaveAlpha(im, 1); + + path = gdTestFilePath2("gdimagesetpixel", "alphablending_exp.png"); + gdAssertImageEqualsToFile(path, im); + gdFree(path); + + gdImageDestroy(im); + + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagesquaretocircle/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagesquaretocircle/CMakeLists.txt new file mode 100644 index 00000000000..a8c9430b5c7 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagesquaretocircle/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(PNG_FOUND) +LIST(APPEND TESTS_FILES + gdimagesquaretocircle +) +ENDIF(PNG_FOUND) + +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagesquaretocircle/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagesquaretocircle/Makemodule.am new file mode 100644 index 00000000000..5b303000756 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagesquaretocircle/Makemodule.am @@ -0,0 +1,6 @@ +libgd_test_programs += \ + gdimagesquaretocircle/gdimagesquaretocircle + +EXTRA_DIST += \ + gdimagesquaretocircle/CMakeLists.txt \ + gdimagesquaretocircle/gdimagesquaretocircle_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagesquaretocircle/gdimagesquaretocircle.c b/Build/source/libs/gd/libgd-src/tests/gdimagesquaretocircle/gdimagesquaretocircle.c new file mode 100644 index 00000000000..f8fba91d384 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagesquaretocircle/gdimagesquaretocircle.c @@ -0,0 +1,32 @@ +/** + * Basic test for gdImageSquareToCircle() + */ +#include "gd.h" +#include "gdfx.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr im1, im2; + int white; + int black; + + im1 = gdImageCreateTrueColor(128, 128); + white = gdImageColorAllocate(im1, 255, 255, 255); + black = gdImageColorAllocate(im1, 0, 0, 0); + gdImageFilledRectangle(im1, 0, 0, 127, 127, white); + + /* Draw a cross line in the middle of im1 */ + /* The horizonal line will become a circle in im2 */ + /* The vertical line will become a horizonal with half len in im2 */ + gdImageLine(im1, 0, 63, 127, 63, black); + gdImageLine(im1, 63, 0, 63, 127, black); + im2 = gdImageSquareToCircle(im1, 64); + + gdAssertImageEqualsToFile("gdimagesquaretocircle/gdimagesquaretocircle_exp.png", im2); + + gdImageDestroy(im1); + gdImageDestroy(im2); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagesquaretocircle/gdimagesquaretocircle_exp.png b/Build/source/libs/gd/libgd-src/tests/gdimagesquaretocircle/gdimagesquaretocircle_exp.png Binary files differnew file mode 100644 index 00000000000..222bb13f6fa --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagesquaretocircle/gdimagesquaretocircle_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestring/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagestring/CMakeLists.txt new file mode 100644 index 00000000000..3cabaec548b --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestring/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(PNG_FOUND) +LIST(APPEND TESTS_FILES + gdimagestring +) +ENDIF(PNG_FOUND) + +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestring/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagestring/Makemodule.am new file mode 100644 index 00000000000..84ca656555f --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestring/Makemodule.am @@ -0,0 +1,8 @@ +if HAVE_LIBPNG +libgd_test_programs += \ + gdimagestring/gdimagestring +endif + +EXTRA_DIST += \ + gdimagestring/CMakeLists.txt \ + gdimagestring/gdimagestring_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestring/gdimagestring.c b/Build/source/libs/gd/libgd-src/tests/gdimagestring/gdimagestring.c new file mode 100644 index 00000000000..c4b4aa1e898 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestring/gdimagestring.c @@ -0,0 +1,34 @@ +/** + * Base test for gdImageString() + */ +#include <gd.h> +#include <gdfontl.h> +#include "gdtest.h" +#include <string.h> + +int main() +{ + /* Declare the image */ + gdImagePtr im = NULL; + char *s = "Hello gd"; + int foreground = 0; + int error = 0; + gdFontPtr fontptr = gdFontGetLarge(); + + im = gdImageCreate(100, 50); + gdImageColorAllocate(im, 202, 202, 0); + foreground = gdImageColorAllocate(im, 22, 4, 238); + + gdImageString(im, fontptr, + im->sx / 2 - (strlen(s) * fontptr->w / 2), + im->sy / 2 - fontptr->h / 2, + (unsigned char*)s, foreground); + + if (!gdAssertImageEqualsToFile("gdimagestring/gdimagestring_exp.png", im)) + error= 1; + + /* Destroy the image in memory. */ + gdImageDestroy(im); + + return error; +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestring/gdimagestring_exp.png b/Build/source/libs/gd/libgd-src/tests/gdimagestring/gdimagestring_exp.png Binary files differnew file mode 100644 index 00000000000..24356267fe9 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestring/gdimagestring_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestring16/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagestring16/CMakeLists.txt new file mode 100644 index 00000000000..e85db9b587c --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestring16/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(PNG_FOUND) +LIST(APPEND TESTS_FILES + gdimagestring16 +) +ENDIF(PNG_FOUND) + +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestring16/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagestring16/Makemodule.am new file mode 100644 index 00000000000..84b6b5fd2fe --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestring16/Makemodule.am @@ -0,0 +1,8 @@ +if HAVE_LIBPNG +libgd_test_programs += \ + gdimagestring16/gdimagestring16 +endif + +EXTRA_DIST += \ + gdimagestring16/CMakeLists.txt \ + gdimagestring16/gdimagestring16_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestring16/gdimagestring16.c b/Build/source/libs/gd/libgd-src/tests/gdimagestring16/gdimagestring16.c new file mode 100644 index 00000000000..57eae978c36 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestring16/gdimagestring16.c @@ -0,0 +1,32 @@ +/** + * Base test for gdImageString16() + */ +#include <gd.h> +#include <gdfontl.h> +#include "gdtest.h" + +int main() +{ + /* Declare the image */ + gdImagePtr im = NULL; + wchar_t *wchr = L"H"; + unsigned short *sptr; + sptr = (unsigned short *)wchr; + int foreground; + int errorcode = 0; + gdFontPtr fontptr = gdFontGetLarge(); + + im = gdImageCreate(20, 20); + gdImageColorAllocate(im, 255, 255, 255); + foreground = gdImageColorAllocate(im, 22, 4, 238); + + gdImageString16(im, fontptr, 2, 2, sptr, foreground); + + if (!gdAssertImageEqualsToFile("gdimagestring16/gdimagestring16_exp.png", im)) + errorcode = 1; + + /* Destroy the image in memory */ + gdImageDestroy(im); + + return errorcode; +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestring16/gdimagestring16_exp.png b/Build/source/libs/gd/libgd-src/tests/gdimagestring16/gdimagestring16_exp.png Binary files differnew file mode 100644 index 00000000000..5700578b0e2 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestring16/gdimagestring16_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestringft/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagestringft/CMakeLists.txt index 00a8f43cb63..f46b9006ee6 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagestringft/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestringft/CMakeLists.txt @@ -1,9 +1,7 @@ IF(FREETYPE_FOUND) -IF(PNG_FOUND) LIST(APPEND TESTS_FILES gdimagestringft_bbox ) -ENDIF(PNG_FOUND) ENDIF(FREETYPE_FOUND) -ADD_GD_TESTS(m) +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestringft/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagestringft/Makemodule.am index 956e1db0d10..0dfe26fb13c 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagestringft/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestringft/Makemodule.am @@ -1,9 +1,7 @@ if HAVE_LIBFREETYPE -if HAVE_LIBPNG libgd_test_programs += \ gdimagestringft/gdimagestringft_bbox endif -endif EXTRA_DIST += \ gdimagestringft/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestringft/gdimagestringft_bbox.c b/Build/source/libs/gd/libgd-src/tests/gdimagestringft/gdimagestringft_bbox.c index 1596a9e7be5..5d57bc7b062 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagestringft/gdimagestringft_bbox.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestringft/gdimagestringft_bbox.c @@ -8,22 +8,22 @@ #define DELTA (PI/8) static int EXPECT[16][8] = { - {498, 401, 630, 401, 630, 374, 498, 374}, - {491, 364, 613, 313, 602, 288, 481, 338}, - {470, 332, 563, 239, 544, 219, 451, 312}, - {438, 310, 488, 189, 463, 178, 412, 300}, - {401, 303, 401, 171, 374, 171, 374, 303}, - {365, 310, 314, 188, 289, 199, 339, 320}, - {334, 331, 241, 238, 221, 257, 314, 350}, - {313, 362, 192, 312, 181, 337, 303, 388}, - {306, 398, 174, 398, 174, 425, 306, 425}, - {313, 433, 191, 484, 202, 509, 323, 459}, - {333, 463, 240, 556, 259, 576, 352, 483}, - {363, 484, 313, 605, 338, 616, 389, 494}, - {398, 490, 398, 622, 425, 622, 425, 490}, - {432, 483, 483, 605, 508, 594, 458, 473}, - {461, 464, 554, 557, 574, 538, 481, 445}, - {481, 435, 602, 485, 613, 460, 491, 409}, + {500, 400, 628, 400, 628, 376, 500, 376}, + {492, 362, 611, 312, 601, 290, 483, 339}, + {470, 330, 561, 239, 544, 221, 453, 312}, + {437, 308, 486, 189, 464, 180, 414, 299}, + {400, 301, 400, 173, 376, 173, 376, 301}, + {363, 309, 313, 190, 291, 200, 340, 318}, + {332, 331, 241, 240, 223, 257, 314, 348}, + {311, 363, 192, 314, 183, 336, 302, 386}, + {304, 399, 176, 399, 176, 423, 304, 423}, + {312, 435, 193, 485, 203, 507, 321, 458}, + {333, 465, 242, 556, 259, 574, 350, 483}, + {364, 486, 315, 605, 337, 614, 387, 495}, + {399, 492, 399, 620, 423, 620, 423, 492}, + {434, 484, 484, 603, 506, 593, 457, 475}, + {463, 464, 554, 555, 572, 538, 481, 447}, + {483, 434, 602, 483, 611, 461, 492, 411}, }; int main() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestringup/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagestringup/CMakeLists.txt new file mode 100644 index 00000000000..424cb837dad --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestringup/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(PNG_FOUND) +LIST(APPEND TESTS_FILES + gdimagestringup +) +ENDIF(PNG_FOUND) + +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestringup/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagestringup/Makemodule.am new file mode 100644 index 00000000000..b136c80c906 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestringup/Makemodule.am @@ -0,0 +1,8 @@ +if HAVE_LIBPNG +libgd_test_programs += \ + gdimagestringup/gdimagestringup +endif + +EXTRA_DIST += \ + gdimagestringup/CMakeLists.txt \ + gdimagestringup/gdimagestringup_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestringup/gdimagestringup.c b/Build/source/libs/gd/libgd-src/tests/gdimagestringup/gdimagestringup.c new file mode 100644 index 00000000000..0832bd79072 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestringup/gdimagestringup.c @@ -0,0 +1,34 @@ +/** + * Base test for gdImageStringUp() + */ +#include <gd.h> +#include <gdfontl.h> +#include "gdtest.h" +#include <string.h> + +int main() +{ + /* Declare the image */ + gdImagePtr im = NULL; + char *s = "Hello gd"; + int errorcode = 0; + int foreground; + gdFontPtr fontptr = gdFontGetLarge(); + + im = gdImageCreate(50, 100); + gdImageColorAllocate(im, 202, 202, 0); + foreground = gdImageColorAllocate(im, 22, 4, 238); + + gdImageStringUp(im, fontptr, + im->sx / 2 - fontptr->h / 2, + im->sy / 2 + (strlen(s) * fontptr->w / 2), + (unsigned char*)s, foreground); + + if (!gdAssertImageEqualsToFile("gdimagestringup/gdimagestringup_exp.png", im)) + errorcode = 1; + + /* Destroy the image im memory */ + gdImageDestroy(im); + + return errorcode; +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestringup/gdimagestringup_exp.png b/Build/source/libs/gd/libgd-src/tests/gdimagestringup/gdimagestringup_exp.png Binary files differnew file mode 100644 index 00000000000..d1f6d664848 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestringup/gdimagestringup_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestringup16/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagestringup16/CMakeLists.txt new file mode 100644 index 00000000000..08f4ff8238f --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestringup16/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(PNG_FOUND) +LIST(APPEND TESTS_FILES + gdimagestringup16 +) +ENDIF(PNG_FOUND) + +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestringup16/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdimagestringup16/Makemodule.am new file mode 100644 index 00000000000..7735432b3da --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestringup16/Makemodule.am @@ -0,0 +1,8 @@ +if HAVE_LIBPNG +libgd_test_programs += \ + gdimagestringup16/gdimagestringup16 +endif + +EXTRA_DIST += \ + gdimagestringup16/CMakeLists.txt \ + gdimagestringup16/gdimagestringup16_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestringup16/gdimagestringup16.c b/Build/source/libs/gd/libgd-src/tests/gdimagestringup16/gdimagestringup16.c new file mode 100644 index 00000000000..c843abec473 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestringup16/gdimagestringup16.c @@ -0,0 +1,31 @@ +/** + * Base test for gdImageStringUp16() + */ +#include <gd.h> +#include <gdfontl.h> +#include "gdtest.h" + +int main() +{ + /* Declare the image */ + gdImagePtr im = NULL; + wchar_t *wchr = L"H"; + unsigned short *sptr; + sptr = (unsigned short *)wchr; + int foreground; + int errorcode = 0; + gdFontPtr fontptr = gdFontGetLarge(); + + im = gdImageCreate(20, 20); + gdImageColorAllocate(im, 255, 255, 255); + foreground = gdImageColorAllocate(im, 22, 4, 238); + + gdImageStringUp16(im, fontptr, 2, 18, sptr, foreground); + + if (!gdAssertImageEqualsToFile("gdimagestringup16/gdimagestringup16_exp.png", im)) + errorcode = 1; + + gdImageDestroy(im); + + return errorcode; +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagestringup16/gdimagestringup16_exp.png b/Build/source/libs/gd/libgd-src/tests/gdimagestringup16/gdimagestringup16_exp.png Binary files differnew file mode 100644 index 00000000000..a1a457016dc --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdimagestringup16/gdimagestringup16_exp.png diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagetruecolortopalette/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdimagetruecolortopalette/CMakeLists.txt index b23d2a1b86a..fc7f6f73b14 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagetruecolortopalette/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdimagetruecolortopalette/CMakeLists.txt @@ -1,4 +1,4 @@ -SET(TESTS_FILES +LIST(APPEND TESTS_FILES bug00307 php_bug_72512 ) diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagetruecolortopalette/bug00307.c b/Build/source/libs/gd/libgd-src/tests/gdimagetruecolortopalette/bug00307.c index a5c6a04b64f..a01eb5ae940 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdimagetruecolortopalette/bug00307.c +++ b/Build/source/libs/gd/libgd-src/tests/gdimagetruecolortopalette/bug00307.c @@ -5,7 +5,7 @@ * GD_QUANT_NEUQUANT has its trueColor flag unset. */ - + #include "gd.h" #include "gdtest.h" diff --git a/Build/source/libs/gd/libgd-src/tests/gdinterpolatedscale/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdinterpolatedscale/CMakeLists.txt index af0fd8c585e..7957c156a86 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdinterpolatedscale/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gdinterpolatedscale/CMakeLists.txt @@ -4,3 +4,6 @@ LIST(APPEND TESTS_FILES ) ADD_GD_TESTS() + +# Probably should speed this test up. +set_tests_properties(test_${TEST_PREFIX}_gdTrivialResize PROPERTIES TIMEOUT 20) diff --git a/Build/source/libs/gd/libgd-src/tests/gdtest/gdtest.c b/Build/source/libs/gd/libgd-src/tests/gdtest/gdtest.c index 7e9ee362985..832f27ae303 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdtest/gdtest.c +++ b/Build/source/libs/gd/libgd-src/tests/gdtest/gdtest.c @@ -1,4 +1,6 @@ +#ifdef HAVE_CONFIG_H #include <config.h> +#endif #include <assert.h> #include <setjmp.h> #include <stdlib.h> @@ -21,7 +23,14 @@ #endif #ifdef _WIN32 -# include "readdir.h" +#include "readdir.h" +#include <errno.h> +#endif + +/* GDTEST_TOP_DIR is defined in other compile ways except msys + * test_config.h is created by windows/msys/run_test.sh*/ +#ifndef GDTEST_TOP_DIR +#include <test_config.h> #endif #include "gd.h" @@ -40,7 +49,6 @@ void gdSilence(int priority, const char *format, va_list args) (void)args; } -#ifdef HAVE_LIBPNG gdImagePtr gdTestImageFromPng(const char *filename) { gdImagePtr image; @@ -58,14 +66,13 @@ gdImagePtr gdTestImageFromPng(const char *filename) } if (fp == NULL) { - return NULL; + return NULL; } image = gdImageCreateFromPng(fp); fclose(fp); return image; } -#endif static char *tmpdir_base; @@ -188,11 +195,11 @@ static int getfilesystemtime(struct timeval *tv) fft.LowPart = ft.dwLowDateTime; ff = fft.QuadPart; - ff /= 10Ui64; /* convert to microseconds */ - ff -= 11644473600000000Ui64; /* convert to unix epoch */ + ff /= 10ULL; /* convert to microseconds */ + ff -= 11644473600000000ULL; /* convert to unix epoch */ - tv->tv_sec = (long)(ff / 1000000Ui64); - tv->tv_usec = (long)(ff % 1000000Ui64); + tv->tv_sec = (long)(ff / 1000000ULL); + tv->tv_usec = (long)(ff % 1000000ULL); return 0; } @@ -205,7 +212,7 @@ mkdtemp (char *tmpl) static int counter = 0; char *XXXXXX; struct timeval tv; - _int64 value; + __int64 value; int count; /* find the last occurrence of "XXXXXX" */ @@ -221,7 +228,7 @@ mkdtemp (char *tmpl) value = (tv.tv_usec ^ tv.tv_sec) + counter++; for (count = 0; count < 100; value += 7777, ++count) { - _int64 v = value; + __int64 v = value; /* Fill in the random bits. */ XXXXXX[0] = letters[v % NLETTERS]; @@ -306,7 +313,7 @@ char *gdTestTempFile(const char *template) ret); gdTestAssert(error != 0); } else { - sprintf(ret, "%s\\%s", tempdir, template); + sprintf(ret, "%s\\%s", tempdir, template); } } #else @@ -363,6 +370,7 @@ char *gdTestFilePathV(const char *path, va_list args) strcat(file, "/"); #endif strcat(file, p); + } while ((p = va_arg(args, const char *)) != NULL); va_end(args); @@ -502,7 +510,6 @@ unsigned int gdMaxPixelDiff(gdImagePtr a, gdImagePtr b) return diff; } -#ifdef HAVE_LIBPNG int gdTestImageCompareToImage(const char* file, unsigned int line, const char* message, gdImagePtr expected, gdImagePtr actual) { @@ -562,6 +569,7 @@ int gdTestImageCompareToImage(const char* file, unsigned int line, const char* m if (!fp) goto fail; gdImagePng(surface_diff,fp); fclose(fp); + gdImageDestroy(surface_diff); fp = fopen(file_out, "wb"); if (!fp) goto fail; @@ -581,9 +589,7 @@ fail: } return 1; } -#endif -#ifdef HAVE_LIBPNG int gdTestImageCompareToFile(const char* file, unsigned int line, const char* message, const char *expected_file, gdImagePtr actual) { @@ -601,7 +607,6 @@ int gdTestImageCompareToFile(const char* file, unsigned int line, const char* me } return res; } -#endif static int failureCount = 0; @@ -622,9 +627,9 @@ int _gdTestAssert(const char* file, unsigned int line, int condition) int _gdTestAssertMsg(const char* file, unsigned int line, int condition, const char* message, ...) { va_list args; - + if (condition) return 1; - + fprintf(stderr, "%s:%u: ", file, line); va_start(args, message); vfprintf(stderr, message, args); diff --git a/Build/source/libs/gd/libgd-src/tests/gdtest/gdtest.h b/Build/source/libs/gd/libgd-src/tests/gdtest/gdtest.h index 82d2feba305..16d89aa48cb 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdtest/gdtest.h +++ b/Build/source/libs/gd/libgd-src/tests/gdtest/gdtest.h @@ -3,7 +3,6 @@ #include <stdarg.h> -#define GDTEST_STRING_MAX 1024 typedef struct CuTestImageResult CuTestImageResult; struct CuTestImageResult { unsigned int pixels_changed; @@ -64,10 +63,8 @@ int _gdTestErrorMsg(const char* file, unsigned int line, const char* string, ... /* public assert functions */ #define gdAssertImageEqualsToFile(ex,ac) gdTestImageCompareToFile(__FILE__,__LINE__,NULL,(ex),(ac)) -#define gdAssertImageFileEqualsMsg(ex,ac,ms) gdTestImageCompareFiles(__FILE__,__LINE__,(ms),(ex),(ac)) #define gdAssertImageEquals(ex,ac) gdTestImageCompareToImage(__FILE__,__LINE__,NULL,(ex),(ac)) -#define gdAssertImageEqualsMsg(ex,ac,ms) gdTestImageCompareToImage(__FILE__,__LINE__,(ms),(ex),(ac)) #define gdTestAssert(cond) _gdTestAssert(__FILE__, __LINE__, (cond)) diff --git a/Build/source/libs/gd/libgd-src/tests/gdtiled/bug00032.c b/Build/source/libs/gd/libgd-src/tests/gdtiled/bug00032.c index 4c788e235cc..7a2b5cccb0d 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdtiled/bug00032.c +++ b/Build/source/libs/gd/libgd-src/tests/gdtiled/bug00032.c @@ -29,4 +29,3 @@ int main() gdImageDestroy(tile); return 0; } - diff --git a/Build/source/libs/gd/libgd-src/tests/gdtransformaffineboundingbox/github_bug_00221.c b/Build/source/libs/gd/libgd-src/tests/gdtransformaffineboundingbox/github_bug_00221.c index c327789d9f8..9e75d0ee368 100644 --- a/Build/source/libs/gd/libgd-src/tests/gdtransformaffineboundingbox/github_bug_00221.c +++ b/Build/source/libs/gd/libgd-src/tests/gdtransformaffineboundingbox/github_bug_00221.c @@ -10,7 +10,7 @@ int main() gdRect bbox; gdRect area; double affine[6]; - + affine[0] = -0.965926; affine[1] = -0.258819; affine[2] = 0.258819; @@ -24,7 +24,7 @@ int main() if (gdTransformAffineBoundingBox(&area, affine, &bbox) != GD_TRUE) { return 1; } - if (!(bbox.x ==-253 && bbox.y ==-228 && bbox.width == 298 && bbox.height == 230)) { + if (!(bbox.x ==-253 && bbox.y ==-228 && bbox.width == 297 && bbox.height == 229)) { return 1; } diff --git a/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/CMakeLists.txt new file mode 100644 index 00000000000..4af9fcc2b10 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/CMakeLists.txt @@ -0,0 +1,8 @@ +LIST(APPEND TESTS_FILES + github_bug_00583 + github_bug_00585 + github_bug_00586 + github_bug_00596 +) + +ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/Makemodule.am new file mode 100644 index 00000000000..494ec80d535 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/Makemodule.am @@ -0,0 +1,8 @@ +libgd_test_programs += \ + gdtransformaffinecopy/github_bug_00583 \ + gdtransformaffinecopy/github_bug_00585 \ + gdtransformaffinecopy/github_bug_00586 \ + gdtransformaffinecopy/github_bug_00596 + +EXTRA_DIST += \ + gdtransformaffinecopy/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/github_bug_00583.c b/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/github_bug_00583.c new file mode 100644 index 00000000000..6b0fd53d1ca --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/github_bug_00583.c @@ -0,0 +1,30 @@ +/** + * Test that a zero determinant matrix causes gdTransformAffineCopy() to fail + * + * See <https://github.com/libgd/libgd/issues/583> + */ + +#include "gd.h" +#include "gdtest.h" + + +int main() +{ + gdImagePtr src, dst; + gdRect rect = {0, 0, 8, 8}; + double matrix[] = {1, 1, 1, 1, 1, 1}; + int white; + int res; + + src = gdImageCreateTrueColor(8, 8); + gdTestAssert(src != NULL); + dst = gdImageCreateTrueColor(8, 8); + gdTestAssert(dst != NULL); + white = gdImageColorAllocate(src, 255, 255, 255); + gdImageFilledRectangle(src, 0, 0, 7, 7, white); + res = gdTransformAffineCopy(dst, 0, 0, src, &rect, matrix); + gdTestAssert(res == GD_FALSE); + gdImageDestroy(dst); + gdImageDestroy(src); + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/github_bug_00585.c b/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/github_bug_00585.c new file mode 100644 index 00000000000..e83910c95ac --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/github_bug_00585.c @@ -0,0 +1,33 @@ +/* + * Test that gdTransformAffineCopy() does not change the interpolation method + * + * See <https://github.com/libgd/libgd/issues/585> + */ + +#include "gd.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr src, dst; + gdRect rect = {0, 0, 8, 8}; + double matrix[] = {1, 1, 1, 1, 1, 1}; + int res; + gdInterpolationMethod old_m, new_m; + + src = gdImageCreateTrueColor(8, 8); + gdTestAssert(src != NULL); + dst = gdImageCreateTrueColor(8, 8); + gdTestAssert(dst != NULL); + + res = gdImageSetInterpolationMethod(src, GD_CATMULLROM); + gdTestAssert(res == GD_TRUE); + old_m = gdImageGetInterpolationMethod(src); + gdTransformAffineCopy(dst, 0, 0, src, &rect, matrix); + new_m = gdImageGetInterpolationMethod(src); + gdTestAssert(new_m == old_m); + + gdImageDestroy(src); + gdImageDestroy(dst); + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/github_bug_00586.c b/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/github_bug_00586.c new file mode 100644 index 00000000000..4cf2f2ee572 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/github_bug_00586.c @@ -0,0 +1,26 @@ +/* + * Test that gdTransformAffineCopy() does not segfault for palette images + * + * See <> + */ + +#include "gd.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr src, dst; + gdRect rect = {0, 0, 8, 8}; + double matrix[] = {1, 0, 0, 1, 0, 0}; + + src = gdImageCreate(8, 8); + gdTestAssert(src != NULL); + dst = gdImageCreate(8, 8); + gdTestAssert(dst != NULL); + + gdTransformAffineCopy(dst, 0, 0, src, &rect, matrix); + + gdImageDestroy(dst); + gdImageDestroy(src); + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/github_bug_00596.c b/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/github_bug_00596.c new file mode 100644 index 00000000000..51912e1a1ec --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gdtransformaffinecopy/github_bug_00596.c @@ -0,0 +1,42 @@ +/** + * Test gdTransformAffineCopy() run error + * + * See <https://github.com/libgd/libgd/issues/596> + * + */ + +#include "gd.h" +#include "gdtest.h" + +int main() +{ + double matrix[] = {1, 0, 0, 1, 0, 0}; + gdImagePtr src, dst; + gdRect rect = {0, 0, 16, 16}; + int white, green; + int status = 0; + int res; + int actual_color = 0; + int expected_color = 0x00ff00; + + src = gdImageCreateTrueColor(16, 16); + gdTestAssert(src != NULL); + white = gdImageColorAllocate(src, 255, 255, 255); + gdImageFilledRectangle(src, 0, 0, 16, 16, white); + + dst = gdImageCreateTrueColor(50, 50); + gdTestAssert(dst != NULL); + green = gdImageColorAllocate(dst, 0, 255, 0); + gdImageFilledRectangle(dst, 0, 0, 50, 50, green); + + res = gdTransformAffineCopy(dst, 4, 4, src, &rect, matrix); + gdTestAssert(res != GD_FALSE); + + status = gdNumFailures(); + actual_color = gdImageGetPixel(dst, 20, 5); + status = (actual_color == expected_color) ? status : 1; + + gdImageDestroy(src); + gdImageDestroy(dst); + return status; +} diff --git a/Build/source/libs/gd/libgd-src/tests/gif/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/gif/CMakeLists.txt index 7d40cddca6a..c4b90077a28 100644 --- a/Build/source/libs/gd/libgd-src/tests/gif/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/gif/CMakeLists.txt @@ -2,17 +2,20 @@ LIST(APPEND TESTS_FILES bug00005_2 bug00181 bug00227 + bug00499 gif_null + ossfuzz5700 + php_bug_75571 + uninitialized_memory_read + bug00006 + bug00060 + gif_im2im ) IF(PNG_FOUND) LIST(APPEND TESTS_FILES bug00005 - bug00006 - bug00060 bug00066 - gif_im2im - uninitialized_memory_read ) ENDIF(PNG_FOUND) diff --git a/Build/source/libs/gd/libgd-src/tests/gif/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/gif/Makemodule.am index 0bdeab7e663..9306b7189e7 100644 --- a/Build/source/libs/gd/libgd-src/tests/gif/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/gif/Makemodule.am @@ -2,16 +2,19 @@ libgd_test_programs += \ gif/bug00005_2 \ gif/bug00181 \ gif/bug00227 \ + gif/bug00499 \ gif/gif_null \ - gif/uninitialized_memory_read + gif/ossfuzz5700 \ + gif/php_bug_75571 \ + gif/uninitialized_memory_read \ + gif/bug00006 \ + gif/bug00060 \ + gif/gif_im2im if HAVE_LIBPNG libgd_test_programs += \ gif/bug00005 \ - gif/bug00006 \ - gif/bug00060 \ - gif/bug00066 \ - gif/gif_im2im + gif/bug00066 endif EXTRA_DIST += \ @@ -24,4 +27,6 @@ EXTRA_DIST += \ gif/bug00060.gif \ gif/bug00066.gif \ gif/bug00066_exp.png \ + gif/ossfuzz5700.gif \ + gif/php_bug_75571.gif \ gif/unitialized_memory_read.gif diff --git a/Build/source/libs/gd/libgd-src/tests/gif/bug00006.c b/Build/source/libs/gd/libgd-src/tests/gif/bug00006.c index c80d3878e5b..95f76203b29 100644 --- a/Build/source/libs/gd/libgd-src/tests/gif/bug00006.c +++ b/Build/source/libs/gd/libgd-src/tests/gif/bug00006.c @@ -64,5 +64,6 @@ int main() /* Destroy it */ gdImageDestroy(im); + free(file); return error; } diff --git a/Build/source/libs/gd/libgd-src/tests/gif/bug00181.c b/Build/source/libs/gd/libgd-src/tests/gif/bug00181.c index 43b9e3b15c9..878537ff839 100644 --- a/Build/source/libs/gd/libgd-src/tests/gif/bug00181.c +++ b/Build/source/libs/gd/libgd-src/tests/gif/bug00181.c @@ -92,6 +92,7 @@ int main() } error = !im->interlace; gdImageDestroy(im); + free(file); return error; } diff --git a/Build/source/libs/gd/libgd-src/tests/gif/bug00227.c b/Build/source/libs/gd/libgd-src/tests/gif/bug00227.c index e25bd9a92a8..aa20645114f 100644 --- a/Build/source/libs/gd/libgd-src/tests/gif/bug00227.c +++ b/Build/source/libs/gd/libgd-src/tests/gif/bug00227.c @@ -65,5 +65,7 @@ int main() if (buf[PROBE_SIZE-1] & 0x80) return 1; free(buf); fclose(fp); + + free(file); return 0; } diff --git a/Build/source/libs/gd/libgd-src/tests/gif/bug00499.c b/Build/source/libs/gd/libgd-src/tests/gif/bug00499.c new file mode 100644 index 00000000000..0fedb927ca4 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gif/bug00499.c @@ -0,0 +1,51 @@ +/** + * Test that adding identical images to GIF animations do no double-free + * + * We are adding two frames to a GIF animation in gdDisposalNone mode, were the + * second frame is identical to the first, which result in that image to have + * zero extent. This program must not cause any memory issues. + * + * See also <https://github.com/libgd/libgd/issues/499>. + */ + + +#include "gd.h" +#include "gdtest.h" + + +int main() +{ + gdImagePtr im; + int black; + int size; + void * res; + + im = gdImageCreate(100, 100); + black = gdImageColorAllocate(im, 0, 0, 0); + gdImageRectangle(im, 0, 0, 10, 10, black); + + res = gdImageGifAnimBeginPtr(im, &size, 1, 3); + if (res != NULL) { + gdFree(res); + } + + res = gdImageGifAnimAddPtr(im, &size, 0, 0, 0, 100, gdDisposalNone, NULL); + if (res != NULL) { + gdFree(res); + } + + res = gdImageGifAnimAddPtr(im, &size, 0, 0, 0, 100, gdDisposalNone, im); + gdTestAssert(res == NULL); + if (res != NULL) { + gdFree(res); + } + + res = gdImageGifAnimEndPtr(&size); + if (res != NULL) { + gdFree(res); + } + + gdImageDestroy(im); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gif/ossfuzz5700.c b/Build/source/libs/gd/libgd-src/tests/gif/ossfuzz5700.c new file mode 100644 index 00000000000..8fc9f88cd6c --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gif/ossfuzz5700.c @@ -0,0 +1,13 @@ +#include <stdio.h> +#include "gd.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr im; + FILE *fp = gdTestFileOpen("gif/ossfuzz5700.gif"); + im = gdImageCreateFromGif(fp); + fclose(fp); + gdImageDestroy(im); + return 0; +} diff --git a/Build/source/libs/gd/libgd-src/tests/gif/ossfuzz5700.gif b/Build/source/libs/gd/libgd-src/tests/gif/ossfuzz5700.gif Binary files differnew file mode 100644 index 00000000000..315c5a88dbc --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gif/ossfuzz5700.gif diff --git a/Build/source/libs/gd/libgd-src/tests/gif/php_bug_75571.c b/Build/source/libs/gd/libgd-src/tests/gif/php_bug_75571.c new file mode 100644 index 00000000000..ec1f37e4e58 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gif/php_bug_75571.c @@ -0,0 +1,28 @@ +/** + * Test that GIF reading does not loop infinitely + * + * We are reading a crafted GIF image which has been truncated. This would + * trigger an infinite loop formerly, but know bails out early, returning + * NULL from gdImageCreateFromGif(). + * + * See also https://bugs.php.net/bug.php?id=75571. + */ + + +#include "gd.h" +#include "gdtest.h" + + +int main() +{ + gdImagePtr im; + FILE *fp; + + fp = gdTestFileOpen2("gif", "php_bug_75571.gif"); + gdTestAssert(fp != NULL); + im = gdImageCreateFromGif(fp); + gdTestAssert(im == NULL); + fclose(fp); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/gif/php_bug_75571.gif b/Build/source/libs/gd/libgd-src/tests/gif/php_bug_75571.gif Binary files differnew file mode 100644 index 00000000000..3c30b40f281 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/gif/php_bug_75571.gif diff --git a/Build/source/libs/gd/libgd-src/tests/jpeg/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/jpeg/CMakeLists.txt index 19964b0ce2c..ff188a93888 100644 --- a/Build/source/libs/gd/libgd-src/tests/jpeg/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/jpeg/CMakeLists.txt @@ -2,14 +2,15 @@ IF(JPEG_FOUND) LIST(APPEND TESTS_FILES jpeg_empty_file jpeg_im2im + jpeg_ptr_double_free jpeg_null + jpeg_resolution ) IF(PNG_FOUND) LIST(APPEND TESTS_FILES bug_github_18 jpeg_read - jpeg_resolution bug00338 ) ENDIF(PNG_FOUND) diff --git a/Build/source/libs/gd/libgd-src/tests/jpeg/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/jpeg/Makemodule.am index 7e5d317b69f..b778470a9de 100644 --- a/Build/source/libs/gd/libgd-src/tests/jpeg/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/jpeg/Makemodule.am @@ -2,14 +2,15 @@ if HAVE_LIBJPEG libgd_test_programs += \ jpeg/jpeg_empty_file \ jpeg/jpeg_im2im \ - jpeg/jpeg_null + jpeg/jpeg_null \ + jpeg/jpeg_ptr_double_free \ + jpeg/jpeg_resolution if HAVE_LIBPNG libgd_test_programs += \ jpeg/bug_github_18 \ jpeg/bug00338 \ - jpeg/jpeg_read \ - jpeg/jpeg_resolution + jpeg/jpeg_read endif endif diff --git a/Build/source/libs/gd/libgd-src/tests/jpeg/bug00338.c b/Build/source/libs/gd/libgd-src/tests/jpeg/bug00338.c index 15224d32b34..7874df28ed2 100644 --- a/Build/source/libs/gd/libgd-src/tests/jpeg/bug00338.c +++ b/Build/source/libs/gd/libgd-src/tests/jpeg/bug00338.c @@ -8,44 +8,39 @@ * See also ../png/bug00338.c */ - #include <string.h> #include "gd.h" #include "gd_errors.h" #include "gdtest.h" - #define MSG "gd-jpeg: JPEG library reports unrecoverable error: %s" - static int error_handler_called = 0; - static void error_handler(int priority, const char *format, va_list args) { - if (!strcmp(format, MSG)) { - gdTestAssertMsg(priority == GD_WARNING, "expected priority %d, but got %d", GD_WARNING, priority); - error_handler_called = 1; - } + if (!strcmp(format, MSG)) { + gdTestAssertMsg(priority == GD_WARNING, "expected priority %d, but got %d", GD_WARNING, priority); + error_handler_called = 1; + } } - int main() { - gdImagePtr im; - FILE *fp; + gdImagePtr im; + FILE *fp; - gdSetErrorMethod(error_handler); + gdSetErrorMethod(error_handler); - im = gdImageCreateTrueColor(10, 10); - fp = gdTestTempFp(); - gdImagePng(im, fp); - gdImageDestroy(im); + im = gdImageCreateTrueColor(10, 10); + fp = gdTestTempFp(); + gdImagePng(im, fp); + gdImageDestroy(im); - im = gdImageCreateFromJpeg(fp); - gdTestAssert(im == NULL); + im = gdImageCreateFromJpeg(fp); + gdTestAssert(im == NULL); - gdTestAssert(error_handler_called); + gdTestAssert(error_handler_called); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/jpeg/jpeg_ptr_double_free.c b/Build/source/libs/gd/libgd-src/tests/jpeg/jpeg_ptr_double_free.c new file mode 100644 index 00000000000..df5a510bb55 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/jpeg/jpeg_ptr_double_free.c @@ -0,0 +1,31 @@ +/** + * Test that failure to convert to JPEG returns NULL + * + * We are creating an image, set its width to zero, and pass this image to + * `gdImageJpegPtr()` which is supposed to fail, and as such should return NULL. + * + * See also <https://github.com/libgd/libgd/issues/381> + */ + + +#include "gd.h" +#include "gdtest.h" + + +int main() +{ + gdImagePtr src, dst; + int size; + + src = gdImageCreateTrueColor(1, 10); + gdTestAssert(src != NULL); + + src->sx = 0; /* this hack forces gdImageJpegPtr() to fail */ + + dst = gdImageJpegPtr(src, &size, 0); + gdTestAssert(dst == NULL); + + gdImageDestroy(src); + + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/png/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/png/CMakeLists.txt index 6fd64b24447..6d618a0e56a 100644 --- a/Build/source/libs/gd/libgd-src/tests/png/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/png/CMakeLists.txt @@ -10,8 +10,13 @@ LIST(APPEND TESTS_FILES bug00193 bug00338 bug00381_1 +) + +IF(ENABLE_GD_FORMATS) +LIST(APPEND TESTS_FILES bug00381_2 ) +ENDIF(ENABLE_GD_FORMATS) ENDIF(PNG_FOUND) ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/png/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/png/Makemodule.am index c167955b1cb..d28253effff 100644 --- a/Build/source/libs/gd/libgd-src/tests/png/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/png/Makemodule.am @@ -7,10 +7,14 @@ libgd_test_programs += \ png/bug00193 \ png/bug00338 \ png/bug00381_1 \ - png/bug00381_2 \ png/png_im2im \ png/png_null \ png/png_resolution + +if ENABLE_GD_FORMATS +libgd_test_programs += \ + png/bug00381_2 +endif endif EXTRA_DIST += \ diff --git a/Build/source/libs/gd/libgd-src/tests/png/bug00338.c b/Build/source/libs/gd/libgd-src/tests/png/bug00338.c index 0bdd9f9a6f0..f439d8cb8ce 100644 --- a/Build/source/libs/gd/libgd-src/tests/png/bug00338.c +++ b/Build/source/libs/gd/libgd-src/tests/png/bug00338.c @@ -8,41 +8,37 @@ * See also ../jpeg/bug00338.c */ - #include <string.h> #include "gd.h" #include "gd_errors.h" #include "gdtest.h" - #define MSG "gd-png: fatal libpng error: %s\n" - static int error_handler_called = 0; - static void error_handler(int priority, const char *format, va_list args) { - if (!strcmp(format, MSG)) { - gdTestAssertMsg(priority == GD_WARNING, "expected priority %d, but got %d", GD_WARNING, priority); - error_handler_called = 1; - } + if (!strcmp(format, MSG)) { + gdTestAssertMsg(priority == GD_WARNING, "expected priority %d, but got %d", GD_WARNING, priority); + error_handler_called = 1; + } } - int main() { - gdImagePtr im; - FILE *fp; + gdImagePtr im; + FILE *fp; - gdSetErrorMethod(error_handler); + gdSetErrorMethod(error_handler); - im = gdImageCreateTrueColor(10, 10); - fp = gdTestTempFp(); - gdImagePngEx(im, fp, 100); - gdImageDestroy(im); + im = gdImageCreateTrueColor(10, 10); + fp = gdTestTempFp(); + gdImagePngEx(im, fp, 100); + gdImageDestroy(im); + fclose(fp); - gdTestAssert(error_handler_called); + gdTestAssert(error_handler_called); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/png/png_resolution.c b/Build/source/libs/gd/libgd-src/tests/png/png_resolution.c index aed7545ba51..bfc944d01ff 100644 --- a/Build/source/libs/gd/libgd-src/tests/png/png_resolution.c +++ b/Build/source/libs/gd/libgd-src/tests/png/png_resolution.c @@ -24,7 +24,7 @@ int main() gdImageDestroy(im); return 1; } - + gdImageDestroy(im); return 0; } diff --git a/Build/source/libs/gd/libgd-src/tests/tiff/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/tiff/CMakeLists.txt index 8e542e690c4..b1ce8a81627 100644 --- a/Build/source/libs/gd/libgd-src/tests/tiff/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/tiff/CMakeLists.txt @@ -4,8 +4,13 @@ LIST(APPEND TESTS_FILES tiff_invalid_read tiff_null tiff_dpi +) + +IF(PNG_FOUND) +LIST(APPEND TESTS_FILES tiff_read_bw ) +ENDIF(PNG_FOUND) ENDIF(TIFF_FOUND) ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/tiff/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/tiff/Makemodule.am index 2a88d68df3c..a1364399080 100644 --- a/Build/source/libs/gd/libgd-src/tests/tiff/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/tiff/Makemodule.am @@ -3,9 +3,13 @@ libgd_test_programs += \ tiff/tiff_dpi \ tiff/tiff_im2im \ tiff/tiff_invalid_read \ - tiff/tiff_null \ + tiff/tiff_null + +if HAVE_LIBPNG +libgd_test_programs += \ tiff/tiff_read_bw endif +endif EXTRA_DIST += \ tiff/CMakeLists.txt \ diff --git a/Build/source/libs/gd/libgd-src/tests/tiff/tiff_dpi.c b/Build/source/libs/gd/libgd-src/tests/tiff/tiff_dpi.c index 7b607a25fa1..73626466dc1 100644 --- a/Build/source/libs/gd/libgd-src/tests/tiff/tiff_dpi.c +++ b/Build/source/libs/gd/libgd-src/tests/tiff/tiff_dpi.c @@ -1,4 +1,4 @@ -/* +/* * Test that reading and writing image resolution values to/from TIFF files * works correctly. Set the image resolution, write the file, read the file * back and test that the image resolution comes back correct. @@ -23,7 +23,7 @@ int main() r = gdImageColorAllocate(src, 0xFF, 0, 0); gdImageFilledRectangle(src, 0, 0, 99, 99, r); - // gd default DPI is 96; libtiff default is 72. + // gd default DPI is 96; libtiff default is 72. // Use something else so we know the value has been // written / read correctly. res_x = 100; diff --git a/Build/source/libs/gd/libgd-src/tests/tiff/tiff_read_bw.c b/Build/source/libs/gd/libgd-src/tests/tiff/tiff_read_bw.c index c302c63aa86..93b646dfd97 100644 --- a/Build/source/libs/gd/libgd-src/tests/tiff/tiff_read_bw.c +++ b/Build/source/libs/gd/libgd-src/tests/tiff/tiff_read_bw.c @@ -1,26 +1,25 @@ #include "gd.h" #include "gdtest.h" - int main() { - gdImagePtr im; - FILE *fp; - char *path; + gdImagePtr im; + FILE *fp; + char *path; - fp = gdTestFileOpen2("tiff", "tiff_read_bw.tiff"); - gdTestAssert(fp != NULL); - im = gdImageCreateFromTiff(fp); - fclose(fp); + fp = gdTestFileOpen2("tiff", "tiff_read_bw.tiff"); + gdTestAssert(fp != NULL); + im = gdImageCreateFromTiff(fp); + fclose(fp); - gdTestAssert(im != NULL); - gdTestAssert(!gdImageTrueColor(im)); + gdTestAssert(im != NULL); + gdTestAssert(!gdImageTrueColor(im)); - path = gdTestFilePath2("tiff", "tiff_read_bw_exp.png"); - gdAssertImageEqualsToFile(path, im); - gdFree(path); + path = gdTestFilePath2("tiff", "tiff_read_bw_exp.png"); + gdAssertImageEqualsToFile(path, im); + gdFree(path); - gdImageDestroy(im); + gdImageDestroy(im); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/wbmp/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/wbmp/CMakeLists.txt index 1f85a15f86e..4ec45bd30b1 100644 --- a/Build/source/libs/gd/libgd-src/tests/wbmp/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/wbmp/CMakeLists.txt @@ -1,11 +1,6 @@ LIST(APPEND TESTS_FILES wbmp_null -) - -IF(PNG_FOUND) -LIST(APPEND TESTS_FILES wbmp_im2im ) -ENDIF(PNG_FOUND) ADD_GD_TESTS() diff --git a/Build/source/libs/gd/libgd-src/tests/wbmp/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/wbmp/Makemodule.am index fb12272cd83..37f09e1896d 100644 --- a/Build/source/libs/gd/libgd-src/tests/wbmp/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/wbmp/Makemodule.am @@ -1,10 +1,6 @@ libgd_test_programs += \ - wbmp/wbmp_null - -if HAVE_LIBPNG -libgd_test_programs += \ + wbmp/wbmp_null \ wbmp/wbmp_im2im -endif EXTRA_DIST += \ wbmp/CMakeLists.txt diff --git a/Build/source/libs/gd/libgd-src/tests/webp/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/webp/CMakeLists.txt index ec27127b1d6..bfabf2626cd 100644 --- a/Build/source/libs/gd/libgd-src/tests/webp/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/webp/CMakeLists.txt @@ -2,6 +2,7 @@ IF(WEBP_FOUND) LIST(APPEND TESTS_FILES bug00111 bug_double_free + gdImageWebpEx ) ENDIF(WEBP_FOUND) diff --git a/Build/source/libs/gd/libgd-src/tests/webp/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/webp/Makemodule.am index f01f9e672fc..48f2a527014 100644 --- a/Build/source/libs/gd/libgd-src/tests/webp/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/webp/Makemodule.am @@ -1,7 +1,8 @@ if HAVE_LIBWEBP libgd_test_programs += \ webp/bug00111 \ - webp/bug_double_free + webp/bug_double_free \ + webp/gdImageWebpEx endif EXTRA_DIST += \ diff --git a/Build/source/libs/gd/libgd-src/tests/webp/gdImageWebpEx.c b/Build/source/libs/gd/libgd-src/tests/webp/gdImageWebpEx.c new file mode 100644 index 00000000000..43011de9446 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/webp/gdImageWebpEx.c @@ -0,0 +1,26 @@ +/** + * Basic testcase for gdImageWebpEx() + **/ +#include "gd.h" +#include "gdtest.h" + +int main() +{ + gdImagePtr im; + FILE *fp1; + int size = 1; + + im = gdImageCreateTrueColor(20, 20); + if (!im) { + return 1; + } + + fp1 = gdTestTempFp(); + gdImageWebpEx(im, fp1, 8); + gdImageWebpPtrEx(im, &size, 9); + + fclose(fp1); + + gdImageDestroy(im); + return 0; +} diff --git a/Build/source/libs/gd/libgd-src/tests/xbm/CMakeLists.txt b/Build/source/libs/gd/libgd-src/tests/xbm/CMakeLists.txt index 3e3bb696cad..2447fd54d67 100644 --- a/Build/source/libs/gd/libgd-src/tests/xbm/CMakeLists.txt +++ b/Build/source/libs/gd/libgd-src/tests/xbm/CMakeLists.txt @@ -1,7 +1,11 @@ +LIST(APPEND TESTS_FILES + github_bug_501 + github_bug_170 +) + IF(PNG_FOUND) LIST(APPEND TESTS_FILES github_bug_109 - github_bug_170 x10_basic_read ) ENDIF(PNG_FOUND) diff --git a/Build/source/libs/gd/libgd-src/tests/xbm/Makemodule.am b/Build/source/libs/gd/libgd-src/tests/xbm/Makemodule.am index a9a293d1612..4d14916b133 100644 --- a/Build/source/libs/gd/libgd-src/tests/xbm/Makemodule.am +++ b/Build/source/libs/gd/libgd-src/tests/xbm/Makemodule.am @@ -1,7 +1,10 @@ +libgd_test_programs += \ + xbm/github_bug_501 \ + xbm/github_bug_170 + if HAVE_LIBPNG libgd_test_programs += \ xbm/github_bug_109 \ - xbm/github_bug_170 \ xbm/x10_basic_read endif @@ -10,4 +13,5 @@ EXTRA_DIST += \ xbm/github_bug_109.xbm \ xbm/github_bug_109_exp.png \ xbm/x10_basic_read.xbm \ - xbm/x10_basic_read_exp.png + xbm/x10_basic_read_exp.png \ + xbm/github_bug_501.xbm diff --git a/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_109.c b/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_109.c index c0b50a8f0d4..70b793738e1 100644 --- a/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_109.c +++ b/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_109.c @@ -7,29 +7,27 @@ * See also <https://github.com/libgd/libgd/issues/109>. */ - #include "gd.h" #include "gdtest.h" - int main() { - gdImagePtr im; - FILE *fp; - char *path; + 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); + 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); + path = gdTestFilePath2("xbm", "github_bug_109_exp.png"); + gdAssertImageEqualsToFile(path, im); + gdFree(path); - gdImageDestroy(im); + gdImageDestroy(im); - return gdNumFailures(); + return gdNumFailures(); } diff --git a/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_170.c b/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_170.c index 3900da7b1b6..8134fb82fdb 100644 --- a/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_170.c +++ b/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_170.c @@ -47,4 +47,4 @@ int main() gdTestAssertMsg(length == 250, "expected to write 250 bytes; %jd bytes written", (intmax_t) length); return gdNumFailures(); } -#endif
\ No newline at end of file +#endif diff --git a/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_501.c b/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_501.c new file mode 100644 index 00000000000..5d8bfd76b80 --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_501.c @@ -0,0 +1,39 @@ +/* + Test reading an invalid XBM image. + + The pixels of the XBM image are invalid hex which makes the uninitialezed + variable be encoded into the output image i.e. information disclosure. + The image is 8*2. + + See also <https://github.com/libgd/libgd/issues/501>. +*/ + +#include "gd.h" +#include "gdtest.h" + +int main() +{ + + gdImagePtr im; + FILE *fp; + + fp = gdTestFileOpen2("xbm", "github_bug_501.xbm"); + im = gdImageCreateFromXbm(fp); + + gdTestAssert(im == NULL); + + if (im) { + gdTestErrorMsg("Info Disclosed\n"); + int i; + for (i = 0; i < 8; i++) { + printf("Pixel(%d, 0) %0x\n", i, gdImageGetPixel(im, i, 0)); + } + for (i = 0; i < 8; i++) { + printf("Pixel(%d, 1) %0x\n", i, gdImageGetPixel(im, i, 1)); + } + gdImageDestroy(im); + } + + fclose(fp); + return gdNumFailures(); +} diff --git a/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_501.xbm b/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_501.xbm new file mode 100644 index 00000000000..41ad301e7fe --- /dev/null +++ b/Build/source/libs/gd/libgd-src/tests/xbm/github_bug_501.xbm @@ -0,0 +1,4 @@ +#define width 8 +#define height 2 +static char bits[] ={ +xzzxzz diff --git a/Build/source/libs/gd/libgd-src/tests/xbm/x10_basic_read.c b/Build/source/libs/gd/libgd-src/tests/xbm/x10_basic_read.c index 99b9019c5f7..f7c505e55b7 100644 --- a/Build/source/libs/gd/libgd-src/tests/xbm/x10_basic_read.c +++ b/Build/source/libs/gd/libgd-src/tests/xbm/x10_basic_read.c @@ -6,27 +6,25 @@ * which is 2 bytes instead of 1, and the endianess. */ - #include "gd.h" #include "gdtest.h" - int main() { - gdImagePtr im; - FILE *fp; - char *path; + gdImagePtr im; + FILE *fp; + char *path; - fp = gdTestFileOpen2("xbm", "x10_basic_read.xbm"); - im = gdImageCreateFromXbm(fp); - fclose(fp); - gdTestAssert(im != NULL); + fp = gdTestFileOpen2("xbm", "x10_basic_read.xbm"); + im = gdImageCreateFromXbm(fp); + fclose(fp); + gdTestAssert(im != NULL); - path = gdTestFilePath2("xbm", "x10_basic_read_exp.png"); - gdAssertImageEqualsToFile(path, im); - gdFree(path); + path = gdTestFilePath2("xbm", "x10_basic_read_exp.png"); + gdAssertImageEqualsToFile(path, im); + gdFree(path); - gdImageDestroy(im); + gdImageDestroy(im); - return gdNumFailures(); + return gdNumFailures(); } |