mirror of
https://github.com/php/php-src.git
synced 2024-09-28 21:36:12 +00:00
Fix #53154: Zero-height rectangle has whiskers
To avoid drawing the corner pixels twice, gdImageRectangle() draws the vertical lines 2 points shorter than the actual side of the rectangle. However, this causes "whiskers" for rectangles with height 0. This patch fixes this issue and at the same time optimizes the algorithm by drawing only a single line for zero height and zero width rectangles.
This commit is contained in:
parent
ecd32e437e
commit
d87a3312e3
@ -2093,12 +2093,16 @@ void gdImageRectangle (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
|
||||
|
||||
return;
|
||||
} else {
|
||||
y1v = y1h + 1;
|
||||
y2v = y2h - 1;
|
||||
gdImageLine(im, x1h, y1h, x2h, y1h, color);
|
||||
gdImageLine(im, x1h, y2h, x2h, y2h, color);
|
||||
gdImageLine(im, x1v, y1v, x1v, y2v, color);
|
||||
gdImageLine(im, x2v, y1v, x2v, y2v, color);
|
||||
if (x1 == x2 || y1 == y2) {
|
||||
gdImageLine(im, x1, y1, x2, y2, color);
|
||||
} else {
|
||||
y1v = y1h + 1;
|
||||
y2v = y2h - 1;
|
||||
gdImageLine(im, x1h, y1h, x2h, y1h, color);
|
||||
gdImageLine(im, x1h, y2h, x2h, y2h, color);
|
||||
gdImageLine(im, x1v, y1v, x1v, y2v, color);
|
||||
gdImageLine(im, x2v, y1v, x2v, y2v, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
21
ext/gd/tests/bug53154.phpt
Normal file
21
ext/gd/tests/bug53154.phpt
Normal file
@ -0,0 +1,21 @@
|
||||
--TEST--
|
||||
Bug #53154 (Zero-height rectangle has whiskers)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('gd')) die('skip gd extension not available');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$im = imagecreatetruecolor(100, 10);
|
||||
$red = imagecolorallocate($im, 255, 0, 0);
|
||||
imagerectangle($im, 5, 5, 95, 5, $red);
|
||||
var_dump(imagecolorat($im, 5, 4) !== $red);
|
||||
var_dump(imagecolorat($im, 5, 6) !== $red);
|
||||
var_dump(imagecolorat($im, 95, 4) !== $red);
|
||||
var_dump(imagecolorat($im, 95, 6) !== $red);
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
Loading…
Reference in New Issue
Block a user