From d5f89343fbdf84e3ceaeb428a98ad24a52c1d8c7 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Mon, 2 Aug 2021 11:05:57 +0200 Subject: [PATCH] Fix #51498: imagefilledellipse does not work for large circles We backport the respective upstream fix[1]. [1] --- ext/gd/libgd/gd.c | 4 ++-- ext/gd/tests/bug51498.phpt | 20 ++++++++++++++++++++ ext/gd/tests/bug51498_exp.png | Bin 0 -> 27696 bytes 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 ext/gd/tests/bug51498.phpt create mode 100644 ext/gd/tests/bug51498_exp.png diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c index 9c237530085df..7831254b91e57 100644 --- a/ext/gd/libgd/gd.c +++ b/ext/gd/libgd/gd.c @@ -1715,7 +1715,7 @@ void gdImageFilledArc (gdImagePtr im, int cx, int cy, int w, int h, int s, int e void gdImageEllipse(gdImagePtr im, int mx, int my, int w, int h, int c) { int x=0,mx1=0,mx2=0,my1=0,my2=0; - long aq,bq,dx,dy,r,rx,ry,a,b; + int64_t aq,bq,dx,dy,r,rx,ry,a,b; a=w>>1; b=h>>1; @@ -1754,7 +1754,7 @@ void gdImageEllipse(gdImagePtr im, int mx, int my, int w, int h, int c) void gdImageFilledEllipse (gdImagePtr im, int mx, int my, int w, int h, int c) { int x=0,mx1=0,mx2=0,my1=0,my2=0; - long aq,bq,dx,dy,r,rx,ry,a,b; + int64_t aq,bq,dx,dy,r,rx,ry,a,b; int i; int old_y2; diff --git a/ext/gd/tests/bug51498.phpt b/ext/gd/tests/bug51498.phpt new file mode 100644 index 0000000000000..87478ca7c01bb --- /dev/null +++ b/ext/gd/tests/bug51498.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug #51498 (imagefilledellipse does not work for large circles) +--SKIPIF-- + +--FILE-- + +--EXPECT-- +The images are equal. diff --git a/ext/gd/tests/bug51498_exp.png b/ext/gd/tests/bug51498_exp.png new file mode 100644 index 0000000000000000000000000000000000000000..db883907cdca39f28756b9ccf7a72ed2a5e049d6 GIT binary patch literal 27696 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