Fix infinite recursion in agg when drawing bezier with invalid points
* Patch extracted from http://trac.osgeo.org/mapserver/ticket/3862 * Fixes #6738
This commit is contained in:
@@ -165,12 +165,15 @@ namespace agg
|
|||||||
case path_cmd_curve3:
|
case path_cmd_curve3:
|
||||||
m_source->vertex(&end_x, &end_y);
|
m_source->vertex(&end_x, &end_y);
|
||||||
|
|
||||||
m_curve3.init(m_last_x, m_last_y,
|
if (!isnan(m_last_x) && !isnan(m_last_y) && !isnan(*x) && !isnan(*y)
|
||||||
*x, *y,
|
&& !isnan(end_x) && !isnan(end_y)) {
|
||||||
end_x, end_y);
|
m_curve3.init(m_last_x, m_last_y,
|
||||||
|
*x, *y,
|
||||||
|
end_x, end_y);
|
||||||
|
|
||||||
m_curve3.vertex(x, y); // First call returns path_cmd_move_to
|
m_curve3.vertex(x, y); // First call returns path_cmd_move_to
|
||||||
m_curve3.vertex(x, y); // This is the first vertex of the curve
|
m_curve3.vertex(x, y); // This is the first vertex of the curve
|
||||||
|
}
|
||||||
cmd = path_cmd_line_to;
|
cmd = path_cmd_line_to;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -178,13 +181,16 @@ namespace agg
|
|||||||
m_source->vertex(&ct2_x, &ct2_y);
|
m_source->vertex(&ct2_x, &ct2_y);
|
||||||
m_source->vertex(&end_x, &end_y);
|
m_source->vertex(&end_x, &end_y);
|
||||||
|
|
||||||
m_curve4.init(m_last_x, m_last_y,
|
if (!isnan(m_last_x) && !isnan(m_last_y) && !isnan(*x) && !isnan(*y)
|
||||||
*x, *y,
|
&& !isnan(end_x) && !isnan(end_y)) {
|
||||||
ct2_x, ct2_y,
|
m_curve4.init(m_last_x, m_last_y,
|
||||||
end_x, end_y);
|
*x, *y,
|
||||||
|
ct2_x, ct2_y,
|
||||||
|
end_x, end_y);
|
||||||
|
|
||||||
m_curve4.vertex(x, y); // First call returns path_cmd_move_to
|
m_curve4.vertex(x, y); // First call returns path_cmd_move_to
|
||||||
m_curve4.vertex(x, y); // This is the first vertex of the curve
|
m_curve4.vertex(x, y); // This is the first vertex of the curve
|
||||||
|
}
|
||||||
cmd = path_cmd_line_to;
|
cmd = path_cmd_line_to;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user