Skip to content

Commit 092571c

Browse files
committed
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.
1 parent 4ebf527 commit 092571c

File tree

1 file changed

+45
-8
lines changed

1 file changed

+45
-8
lines changed

ext/gd/gd.c

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1836,8 +1836,8 @@ PHP_FUNCTION(imagelayereffect)
18361836
}
18371837
/* }}} */
18381838

1839-
#define CHECK_RGB_RANGE(component, name) \
1840-
if (component < 0 || component > 255) { \
1839+
#define CHECK_RGBA_RANGE(component, name) \
1840+
if (component < 0 || component > gd##name##Max) { \
18411841
php_error_docref(NULL, E_WARNING, #name " component is out of range"); \
18421842
RETURN_FALSE; \
18431843
}
@@ -1859,9 +1859,10 @@ PHP_FUNCTION(imagecolorallocatealpha)
18591859
RETURN_FALSE;
18601860
}
18611861

1862-
CHECK_RGB_RANGE(red, Red);
1863-
CHECK_RGB_RANGE(green, Green);
1864-
CHECK_RGB_RANGE(blue, Blue);
1862+
CHECK_RGBA_RANGE(red, Red);
1863+
CHECK_RGBA_RANGE(green, Green);
1864+
CHECK_RGBA_RANGE(blue, Blue);
1865+
CHECK_RGBA_RANGE(alpha, Alpha);
18651866

18661867
ct = gdImageColorAllocateAlpha(im, red, green, blue, alpha);
18671868
if (ct < 0) {
@@ -1887,6 +1888,11 @@ PHP_FUNCTION(imagecolorresolvealpha)
18871888
RETURN_FALSE;
18881889
}
18891890

1891+
CHECK_RGBA_RANGE(red, Red);
1892+
CHECK_RGBA_RANGE(green, Green);
1893+
CHECK_RGBA_RANGE(blue, Blue);
1894+
CHECK_RGBA_RANGE(alpha, Alpha);
1895+
18901896
RETURN_LONG(gdImageColorResolveAlpha(im, red, green, blue, alpha));
18911897
}
18921898
/* }}} */
@@ -1907,6 +1913,11 @@ PHP_FUNCTION(imagecolorclosestalpha)
19071913
RETURN_FALSE;
19081914
}
19091915

1916+
CHECK_RGBA_RANGE(red, Red);
1917+
CHECK_RGBA_RANGE(green, Green);
1918+
CHECK_RGBA_RANGE(blue, Blue);
1919+
CHECK_RGBA_RANGE(alpha, Alpha);
1920+
19101921
RETURN_LONG(gdImageColorClosestAlpha(im, red, green, blue, alpha));
19111922
}
19121923
/* }}} */
@@ -1927,6 +1938,11 @@ PHP_FUNCTION(imagecolorexactalpha)
19271938
RETURN_FALSE;
19281939
}
19291940

1941+
CHECK_RGBA_RANGE(red, Red);
1942+
CHECK_RGBA_RANGE(green, Green);
1943+
CHECK_RGBA_RANGE(blue, Blue);
1944+
CHECK_RGBA_RANGE(alpha, Alpha);
1945+
19301946
RETURN_LONG(gdImageColorExactAlpha(im, red, green, blue, alpha));
19311947
}
19321948
/* }}} */
@@ -2868,9 +2884,9 @@ PHP_FUNCTION(imagecolorallocate)
28682884
RETURN_FALSE;
28692885
}
28702886

2871-
CHECK_RGB_RANGE(red, Red);
2872-
CHECK_RGB_RANGE(green, Green);
2873-
CHECK_RGB_RANGE(blue, Blue);
2887+
CHECK_RGBA_RANGE(red, Red);
2888+
CHECK_RGBA_RANGE(green, Green);
2889+
CHECK_RGBA_RANGE(blue, Blue);
28742890

28752891
ct = gdImageColorAllocate(im, red, green, blue);
28762892
if (ct < 0) {
@@ -2955,6 +2971,10 @@ PHP_FUNCTION(imagecolorclosest)
29552971
RETURN_FALSE;
29562972
}
29572973

2974+
CHECK_RGBA_RANGE(red, Red);
2975+
CHECK_RGBA_RANGE(green, Green);
2976+
CHECK_RGBA_RANGE(blue, Blue);
2977+
29582978
RETURN_LONG(gdImageColorClosest(im, red, green, blue));
29592979
}
29602980
/* }}} */
@@ -2975,6 +2995,10 @@ PHP_FUNCTION(imagecolorclosesthwb)
29752995
RETURN_FALSE;
29762996
}
29772997

2998+
CHECK_RGBA_RANGE(red, Red);
2999+
CHECK_RGBA_RANGE(green, Green);
3000+
CHECK_RGBA_RANGE(blue, Blue);
3001+
29783002
RETURN_LONG(gdImageColorClosestHWB(im, red, green, blue));
29793003
}
29803004
/* }}} */
@@ -3029,6 +3053,10 @@ PHP_FUNCTION(imagecolorresolve)
30293053
RETURN_FALSE;
30303054
}
30313055

3056+
CHECK_RGBA_RANGE(red, Red);
3057+
CHECK_RGBA_RANGE(green, Green);
3058+
CHECK_RGBA_RANGE(blue, Blue);
3059+
30323060
RETURN_LONG(gdImageColorResolve(im, red, green, blue));
30333061
}
30343062
/* }}} */
@@ -3049,6 +3077,10 @@ PHP_FUNCTION(imagecolorexact)
30493077
RETURN_FALSE;
30503078
}
30513079

3080+
CHECK_RGBA_RANGE(red, Red);
3081+
CHECK_RGBA_RANGE(green, Green);
3082+
CHECK_RGBA_RANGE(blue, Blue);
3083+
30523084
RETURN_LONG(gdImageColorExact(im, red, green, blue));
30533085
}
30543086
/* }}} */
@@ -3070,6 +3102,11 @@ PHP_FUNCTION(imagecolorset)
30703102
RETURN_FALSE;
30713103
}
30723104

3105+
CHECK_RGBA_RANGE(red, Red);
3106+
CHECK_RGBA_RANGE(green, Green);
3107+
CHECK_RGBA_RANGE(blue, Blue);
3108+
CHECK_RGBA_RANGE(alpha, Alpha);
3109+
30733110
col = color;
30743111

30753112
if (col >= 0 && col < gdImageColorsTotal(im)) {

0 commit comments

Comments
 (0)