mirror of
https://github.com/php/php-src.git
synced 2025-08-18 15:08:55 +02:00
Extend color component range checks
We also check for alpha components to be within range, and we add yet missing range checks for other functions as well.
This commit is contained in:
parent
4ebf527136
commit
092571c1cb
1 changed files with 45 additions and 8 deletions
53
ext/gd/gd.c
53
ext/gd/gd.c
|
@ -1836,8 +1836,8 @@ PHP_FUNCTION(imagelayereffect)
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
#define CHECK_RGB_RANGE(component, name) \
|
#define CHECK_RGBA_RANGE(component, name) \
|
||||||
if (component < 0 || component > 255) { \
|
if (component < 0 || component > gd##name##Max) { \
|
||||||
php_error_docref(NULL, E_WARNING, #name " component is out of range"); \
|
php_error_docref(NULL, E_WARNING, #name " component is out of range"); \
|
||||||
RETURN_FALSE; \
|
RETURN_FALSE; \
|
||||||
}
|
}
|
||||||
|
@ -1859,9 +1859,10 @@ PHP_FUNCTION(imagecolorallocatealpha)
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK_RGB_RANGE(red, Red);
|
CHECK_RGBA_RANGE(red, Red);
|
||||||
CHECK_RGB_RANGE(green, Green);
|
CHECK_RGBA_RANGE(green, Green);
|
||||||
CHECK_RGB_RANGE(blue, Blue);
|
CHECK_RGBA_RANGE(blue, Blue);
|
||||||
|
CHECK_RGBA_RANGE(alpha, Alpha);
|
||||||
|
|
||||||
ct = gdImageColorAllocateAlpha(im, red, green, blue, alpha);
|
ct = gdImageColorAllocateAlpha(im, red, green, blue, alpha);
|
||||||
if (ct < 0) {
|
if (ct < 0) {
|
||||||
|
@ -1887,6 +1888,11 @@ PHP_FUNCTION(imagecolorresolvealpha)
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CHECK_RGBA_RANGE(red, Red);
|
||||||
|
CHECK_RGBA_RANGE(green, Green);
|
||||||
|
CHECK_RGBA_RANGE(blue, Blue);
|
||||||
|
CHECK_RGBA_RANGE(alpha, Alpha);
|
||||||
|
|
||||||
RETURN_LONG(gdImageColorResolveAlpha(im, red, green, blue, alpha));
|
RETURN_LONG(gdImageColorResolveAlpha(im, red, green, blue, alpha));
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
@ -1907,6 +1913,11 @@ PHP_FUNCTION(imagecolorclosestalpha)
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CHECK_RGBA_RANGE(red, Red);
|
||||||
|
CHECK_RGBA_RANGE(green, Green);
|
||||||
|
CHECK_RGBA_RANGE(blue, Blue);
|
||||||
|
CHECK_RGBA_RANGE(alpha, Alpha);
|
||||||
|
|
||||||
RETURN_LONG(gdImageColorClosestAlpha(im, red, green, blue, alpha));
|
RETURN_LONG(gdImageColorClosestAlpha(im, red, green, blue, alpha));
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
@ -1927,6 +1938,11 @@ PHP_FUNCTION(imagecolorexactalpha)
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CHECK_RGBA_RANGE(red, Red);
|
||||||
|
CHECK_RGBA_RANGE(green, Green);
|
||||||
|
CHECK_RGBA_RANGE(blue, Blue);
|
||||||
|
CHECK_RGBA_RANGE(alpha, Alpha);
|
||||||
|
|
||||||
RETURN_LONG(gdImageColorExactAlpha(im, red, green, blue, alpha));
|
RETURN_LONG(gdImageColorExactAlpha(im, red, green, blue, alpha));
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
@ -2868,9 +2884,9 @@ PHP_FUNCTION(imagecolorallocate)
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK_RGB_RANGE(red, Red);
|
CHECK_RGBA_RANGE(red, Red);
|
||||||
CHECK_RGB_RANGE(green, Green);
|
CHECK_RGBA_RANGE(green, Green);
|
||||||
CHECK_RGB_RANGE(blue, Blue);
|
CHECK_RGBA_RANGE(blue, Blue);
|
||||||
|
|
||||||
ct = gdImageColorAllocate(im, red, green, blue);
|
ct = gdImageColorAllocate(im, red, green, blue);
|
||||||
if (ct < 0) {
|
if (ct < 0) {
|
||||||
|
@ -2955,6 +2971,10 @@ PHP_FUNCTION(imagecolorclosest)
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CHECK_RGBA_RANGE(red, Red);
|
||||||
|
CHECK_RGBA_RANGE(green, Green);
|
||||||
|
CHECK_RGBA_RANGE(blue, Blue);
|
||||||
|
|
||||||
RETURN_LONG(gdImageColorClosest(im, red, green, blue));
|
RETURN_LONG(gdImageColorClosest(im, red, green, blue));
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
@ -2975,6 +2995,10 @@ PHP_FUNCTION(imagecolorclosesthwb)
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CHECK_RGBA_RANGE(red, Red);
|
||||||
|
CHECK_RGBA_RANGE(green, Green);
|
||||||
|
CHECK_RGBA_RANGE(blue, Blue);
|
||||||
|
|
||||||
RETURN_LONG(gdImageColorClosestHWB(im, red, green, blue));
|
RETURN_LONG(gdImageColorClosestHWB(im, red, green, blue));
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
@ -3029,6 +3053,10 @@ PHP_FUNCTION(imagecolorresolve)
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CHECK_RGBA_RANGE(red, Red);
|
||||||
|
CHECK_RGBA_RANGE(green, Green);
|
||||||
|
CHECK_RGBA_RANGE(blue, Blue);
|
||||||
|
|
||||||
RETURN_LONG(gdImageColorResolve(im, red, green, blue));
|
RETURN_LONG(gdImageColorResolve(im, red, green, blue));
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
@ -3049,6 +3077,10 @@ PHP_FUNCTION(imagecolorexact)
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CHECK_RGBA_RANGE(red, Red);
|
||||||
|
CHECK_RGBA_RANGE(green, Green);
|
||||||
|
CHECK_RGBA_RANGE(blue, Blue);
|
||||||
|
|
||||||
RETURN_LONG(gdImageColorExact(im, red, green, blue));
|
RETURN_LONG(gdImageColorExact(im, red, green, blue));
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
@ -3070,6 +3102,11 @@ PHP_FUNCTION(imagecolorset)
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CHECK_RGBA_RANGE(red, Red);
|
||||||
|
CHECK_RGBA_RANGE(green, Green);
|
||||||
|
CHECK_RGBA_RANGE(blue, Blue);
|
||||||
|
CHECK_RGBA_RANGE(alpha, Alpha);
|
||||||
|
|
||||||
col = color;
|
col = color;
|
||||||
|
|
||||||
if (col >= 0 && col < gdImageColorsTotal(im)) {
|
if (col >= 0 && col < gdImageColorsTotal(im)) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue