@@ -1463,6 +1463,8 @@ void gdImageChar (gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
1463
1463
int cx , cy ;
1464
1464
int px , py ;
1465
1465
int fline ;
1466
+ const int xuppper = (x > INT_MAX - f -> w ) ? INT_MAX : x + f -> w ;
1467
+ const int yuppper = (y > INT_MAX - f -> h ) ? INT_MAX : y + f -> h ;
1466
1468
cx = 0 ;
1467
1469
cy = 0 ;
1468
1470
#ifdef CHARSET_EBCDIC
@@ -1472,8 +1474,8 @@ void gdImageChar (gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
1472
1474
return ;
1473
1475
}
1474
1476
fline = (c - f -> offset ) * f -> h * f -> w ;
1475
- for (py = y ; ( py < ( y + f -> h )) ; py ++ ) {
1476
- for (px = x ; ( px < ( x + f -> w )) ; px ++ ) {
1477
+ for (py = y ; py < yuppper ; py ++ ) {
1478
+ for (px = x ; px < xuppper ; px ++ ) {
1477
1479
if (f -> data [fline + cy * f -> w + cx ]) {
1478
1480
gdImageSetPixel (im , px , py , color );
1479
1481
}
@@ -1489,6 +1491,8 @@ void gdImageCharUp (gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
1489
1491
int cx , cy ;
1490
1492
int px , py ;
1491
1493
int fline ;
1494
+ const int xuppper = (x > INT_MAX - f -> h ) ? INT_MAX : x + f -> h ;
1495
+ const int ylower = (y < INT_MIN + f -> w ) ? INT_MIN : y - f -> w ;
1492
1496
cx = 0 ;
1493
1497
cy = 0 ;
1494
1498
#ifdef CHARSET_EBCDIC
@@ -1498,8 +1502,8 @@ void gdImageCharUp (gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
1498
1502
return ;
1499
1503
}
1500
1504
fline = (c - f -> offset ) * f -> h * f -> w ;
1501
- for (py = y ; py > ( y - f -> w ) ; py -- ) {
1502
- for (px = x ; px < ( x + f -> h ) ; px ++ ) {
1505
+ for (py = y ; py > ylower ; py -- ) {
1506
+ for (px = x ; px < xuppper ; px ++ ) {
1503
1507
if (f -> data [fline + cy * f -> w + cx ]) {
1504
1508
gdImageSetPixel (im , px , py , color );
1505
1509
}
0 commit comments