@@ -1463,6 +1463,8 @@ void gdImageChar (gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
14631463 int cx , cy ;
14641464 int px , py ;
14651465 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 ;
14661468 cx = 0 ;
14671469 cy = 0 ;
14681470#ifdef CHARSET_EBCDIC
@@ -1472,8 +1474,8 @@ void gdImageChar (gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
14721474 return ;
14731475 }
14741476 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 ++ ) {
14771479 if (f -> data [fline + cy * f -> w + cx ]) {
14781480 gdImageSetPixel (im , px , py , color );
14791481 }
@@ -1489,6 +1491,8 @@ void gdImageCharUp (gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
14891491 int cx , cy ;
14901492 int px , py ;
14911493 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 ;
14921496 cx = 0 ;
14931497 cy = 0 ;
14941498#ifdef CHARSET_EBCDIC
@@ -1498,8 +1502,8 @@ void gdImageCharUp (gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
14981502 return ;
14991503 }
15001504 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 ++ ) {
15031507 if (f -> data [fline + cy * f -> w + cx ]) {
15041508 gdImageSetPixel (im , px , py , color );
15051509 }
0 commit comments