mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-01-05 06:50:21 +01:00
Fix numerical problem that could lead to infinite loops.
This commit is contained in:
parent
63468474d7
commit
d7a392bf30
3 changed files with 15 additions and 8 deletions
|
|
@ -1,3 +1,8 @@
|
|||
2004-07-09 Carl Worth <cworth@isi.edu>
|
||||
|
||||
* src/cairo_gstate.c (_cairo_gstate_arc_dir): Fix numerical
|
||||
problem that could lead to infinite loops.
|
||||
|
||||
2004-07-09 Dave Beckett <Dave.Beckett@bristol.ac.uk>
|
||||
|
||||
* autogen.sh: Require automake 1.7 (and thus aclocal 1.7) which
|
||||
|
|
|
|||
|
|
@ -879,25 +879,26 @@ _cairo_gstate_arc_dir (cairo_gstate_t *gstate,
|
|||
|
||||
/* Recurse if drawing arc larger than pi */
|
||||
if (angle_max - angle_min > M_PI) {
|
||||
double angle_mid = angle_min + (angle_max - angle_min) / 2.0;
|
||||
/* XXX: Something tells me this block could be condensed. */
|
||||
if (dir == CAIRO_DIRECTION_FORWARD) {
|
||||
status = _cairo_gstate_arc_dir (gstate, xc, yc, radius,
|
||||
angle_min, angle_min + M_PI, dir);
|
||||
angle_min, angle_mid, dir);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
status = _cairo_gstate_arc_dir (gstate, xc, yc, radius,
|
||||
angle_min + M_PI, angle_max, dir);
|
||||
angle_mid, angle_max, dir);
|
||||
if (status)
|
||||
return status;
|
||||
} else {
|
||||
status = _cairo_gstate_arc_dir (gstate, xc, yc, radius,
|
||||
angle_min + M_PI, angle_max, dir);
|
||||
angle_mid, angle_max, dir);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
status = _cairo_gstate_arc_dir (gstate, xc, yc, radius,
|
||||
angle_min, angle_min + M_PI, dir);
|
||||
angle_min, angle_mid, dir);
|
||||
if (status)
|
||||
return status;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -879,25 +879,26 @@ _cairo_gstate_arc_dir (cairo_gstate_t *gstate,
|
|||
|
||||
/* Recurse if drawing arc larger than pi */
|
||||
if (angle_max - angle_min > M_PI) {
|
||||
double angle_mid = angle_min + (angle_max - angle_min) / 2.0;
|
||||
/* XXX: Something tells me this block could be condensed. */
|
||||
if (dir == CAIRO_DIRECTION_FORWARD) {
|
||||
status = _cairo_gstate_arc_dir (gstate, xc, yc, radius,
|
||||
angle_min, angle_min + M_PI, dir);
|
||||
angle_min, angle_mid, dir);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
status = _cairo_gstate_arc_dir (gstate, xc, yc, radius,
|
||||
angle_min + M_PI, angle_max, dir);
|
||||
angle_mid, angle_max, dir);
|
||||
if (status)
|
||||
return status;
|
||||
} else {
|
||||
status = _cairo_gstate_arc_dir (gstate, xc, yc, radius,
|
||||
angle_min + M_PI, angle_max, dir);
|
||||
angle_mid, angle_max, dir);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
status = _cairo_gstate_arc_dir (gstate, xc, yc, radius,
|
||||
angle_min, angle_min + M_PI, dir);
|
||||
angle_min, angle_mid, dir);
|
||||
if (status)
|
||||
return status;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue