Skip to content

Commit f878058

Browse files
committed
Fix GH-20660: imageellipse()/imagefilledellipse() overflow.
1 parent 1f1147a commit f878058

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

ext/gd/libgd/gd.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1736,11 +1736,24 @@ void gdImageEllipse(gdImagePtr im, int mx, int my, int w, int h, int c)
17361736
x = a;
17371737
while (x > 0){
17381738
if (r > 0) {
1739+
if (my1>INT_MAX-1 ||
1740+
my2<INT_MIN+1 ||
1741+
ry>INT64_MAX-dx ||
1742+
r<INT64_MIN+ry) {
1743+
return;
1744+
}
17391745
my1++;my2--;
17401746
ry +=dx;
17411747
r -=ry;
17421748
}
17431749
if (r <= 0){
1750+
if (x<INT_MIN+1 ||
1751+
mx1>INT_MAX-1 ||
1752+
mx2<INT_MIN+1 ||
1753+
rx<INT64_MIN+dy ||
1754+
r>INT64_MAX-rx) {
1755+
return;
1756+
}
17441757
x--;
17451758
mx1++;mx2--;
17461759
rx -=dy;
@@ -1781,11 +1794,24 @@ void gdImageFilledEllipse (gdImagePtr im, int mx, int my, int w, int h, int c)
17811794
old_y2=-2;
17821795
while (x > 0){
17831796
if (r > 0) {
1797+
if (my1>INT_MAX-1 ||
1798+
my2<INT_MIN+1 ||
1799+
ry>INT64_MAX-dx ||
1800+
r<INT64_MIN+ry) {
1801+
return;
1802+
}
17841803
my1++;my2--;
17851804
ry +=dx;
17861805
r -=ry;
17871806
}
17881807
if (r <= 0){
1808+
if (x<INT_MIN+1 ||
1809+
mx1>INT_MAX-1 ||
1810+
mx2<INT_MIN+1 ||
1811+
rx<INT64_MIN+dy ||
1812+
r>INT64_MAX-rx) {
1813+
return;
1814+
}
17891815
x--;
17901816
mx1++;mx2--;
17911817
rx -=dy;

0 commit comments

Comments
 (0)