diff options
| author | Pierre Joye <pierre.php@gmail.com> | 2021-08-25 17:48:03 +0700 |
|---|---|---|
| committer | Pierre Joye <pierre.php@gmail.com> | 2021-08-25 17:48:03 +0700 |
| commit | 4cd5542152afa8409e688297164a08bf03440197 (patch) | |
| tree | a518e8f47f2e3c4cb1c86ab04435d5fd91c67aac | |
| parent | 5771e976bd973f80d62329df15eb4102d97587c3 (diff) | |
| download | libgd-bug/415.tar.gz | |
fix #415, the same is needed in the other section, add testbug/415
| -rw-r--r-- | src/gd_gif_out.c | 4 | ||||
| -rw-r--r-- | tests/gif/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | tests/gif/bug00415.c | 27 |
3 files changed, 32 insertions, 0 deletions
diff --git a/src/gd_gif_out.c b/src/gd_gif_out.c index c1e54fa..526a221 100644 --- a/src/gd_gif_out.c +++ b/src/gd_gif_out.c @@ -768,6 +768,8 @@ break_bot: /* left side */ for (x = 0; x < min_x; ++x) { for (y = min_y; y <= max_y; ++y) { + if (!gdImageBoundsSafe(prev_tim, x,y)) + continue; if (!comparewithmap (prev_tim, tim, prev_tim->pixels[y][x], @@ -783,6 +785,8 @@ break_left: /* right side */ for (x = tim->sx - 1; x > max_x; --x) { for (y = min_y; y <= max_y; ++y) { + if (!gdImageBoundsSafe(prev_tim, x,y)) + continue; if (!comparewithmap (prev_tim, tim, prev_tim->pixels[y][x], diff --git a/tests/gif/CMakeLists.txt b/tests/gif/CMakeLists.txt index d071874..8349ace 100644 --- a/tests/gif/CMakeLists.txt +++ b/tests/gif/CMakeLists.txt @@ -11,6 +11,7 @@ LIST(APPEND TESTS_FILES bug00006 bug00060 gif_im2im + bug00415 ) IF(PNG_FOUND) diff --git a/tests/gif/bug00415.c b/tests/gif/bug00415.c new file mode 100644 index 0000000..e95df28 --- /dev/null +++ b/tests/gif/bug00415.c @@ -0,0 +1,27 @@ +#include <gd.h> +#include "gdtest.h" + +int main() +{ + gdImagePtr im1, im2; + + im1 = gdImageCreate(100, 100); + gdImageColorAllocate(im1, 0, 0, 0); + im2 = gdImageCreate(10, 10); + gdImageColorAllocate(im2, 255, 255, 255); + + FILE *fp = gdTestTempFp(); + if (!fp) return 4; + gdImageGifAnimBegin(im1, fp, 0, 0); + gdImageGifAnimAdd(im1, fp, 1, 0, 0, 100, 1, NULL); + gdImageGifAnimAdd(im2, fp, 1, 0, 0, 100, 1, im1); + // replacing `im2` with `NULL` in the following line succeeds + gdImageGifAnimAdd(im1, fp, 1, 0, 0, 100, 1, im2); + gdImageGifAnimEnd(fp); + fclose(fp); + + gdImageDestroy(im1); + gdImageDestroy(im2); + + return 0; +}
\ No newline at end of file |
