PHP :: Bug #28304 :: ImageFilter, no bounds check processing image per-pixel: creates a black border
| Bug #28304 | ImageFilter, no bounds check processing image per-pixel: creates a black border | ||||
|---|---|---|---|---|---|
| Submitted: | 2004-05-06 18:50 UTC | Modified: | 2004-05-09 20:26 UTC | ||
| From: | ken at sonicwizardry dot com | Assigned: | pajoye (profile) | ||
| Status: | Closed | Package: | GD related | ||
| PHP Version: | 5.0.0RC2 | OS: | Linux | ||
| Private report: | No | CVE-ID: | None | ||
[2004-05-06 18:50 UTC] ken at sonicwizardry dot com
Description: ------------ Running ImageFilter on an image creates a black border around the edge because it references non-existing pixels off of the image (beyond image size). Bounds check/clamp added to convolution loop. Code DIFF is below: File path: ext/gd/libgd/gd.c 3607,3610c3607,3614 < pxl = f(srcback, x-(3>>1)+i, y-(3>>1)+j); < new_r += (float)gdImageRed(srcback, pxl) * filter[j][i]; < new_g += (float)gdImageGreen(srcback, pxl) * filter[j][i]; < new_b += (float)gdImageBlue(srcback, pxl) * filter[j][i]; --- > int ix = x-(3>>1)+i; > int iy = y-(3>>1)+j; > ix = (ix>=src->sx)?src->sx-1 : ((ix<0)?0:ix); > iy = (iy>=src->sy)?src->sy-1 : ((iy<0)?0:iy); > pxl = f(srcback, ix, iy); > new_r += (float)gdImageRed(srcback, pxl) * filter[j][i]; > new_g += (float)gdImageGreen(srcback, pxl) * filter[j][i]; > new_b += (float)gdImageBlue(srcback, pxl) * filter[j][i]; Hope this helps! -Ken Post Jr.
Patches
Pull Requests
History
AllCommentsChangesGit/SVN commits
[2004-05-07 00:12 UTC] pajoye@php.net
[2004-05-07 07:16 UTC] ken at sonicwizardry dot com
[2004-05-09 20:26 UTC] iliaa@php.net