From: mgsloan Date: Sat, 18 Aug 2007 02:17:00 +0000 (+0000) Subject: Fixing a possible segfault in the sbasis to path code (also committed to 2geom)) X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=2ff23b953e6066495d9fb1274b4b3dda02e9a41e;p=inkscape.git Fixing a possible segfault in the sbasis to path code (also committed to 2geom)) --- diff --git a/src/2geom/sbasis-to-bezier.cpp b/src/2geom/sbasis-to-bezier.cpp index 731680075..e823b29ca 100644 --- a/src/2geom/sbasis-to-bezier.cpp +++ b/src/2geom/sbasis-to-bezier.cpp @@ -172,17 +172,19 @@ void build_from_sbasis(Geom::PathBuilder &pb, D2 const &B, double tol) { } } -void -path_from_sbasis(Geom::Path &p, D2 const &B, double tol) { +Path +path_from_sbasis(D2 const &B, double tol) { PathBuilder pb; pb.moveTo(B.at0()); build_from_sbasis(pb, B, tol); - p = pb.peek().front(); + pb.finish(); + return pb.peek().front(); } //TODO: some of this logic should be lifted into svg-path std::vector path_from_piecewise(Geom::Piecewise > const &B, double tol) { + Geom::PathBuilder pb; if(B.size() == 0) return pb.peek(); Geom::Point start = B[0].at0(); @@ -206,6 +208,7 @@ path_from_piecewise(Geom::Piecewise > const &B, double to } build_from_sbasis(pb, B[i], tol); } + pb.finish(); return pb.peek(); } diff --git a/src/live_effects/n-art-bpath-2geom.cpp b/src/live_effects/n-art-bpath-2geom.cpp index 5f4e4c7b9..e71e28b99 100644 --- a/src/live_effects/n-art-bpath-2geom.cpp +++ b/src/live_effects/n-art-bpath-2geom.cpp @@ -45,8 +45,7 @@ static void curve_to_svgd(std::ostream & f, Geom::Curve const* c) { // } else { //this case handles sbasis as well as all other curve types - Geom::Path sbasis_path; - path_from_sbasis(sbasis_path, c->sbasis(), 0.1); + Geom::Path sbasis_path = path_from_sbasis(sbasis_path, c->sbasis(), 0.1); //recurse to convert the new path resulting from the sbasis to svgd for(Geom::Path::iterator iter = sbasis_path.begin(); iter != sbasis_path.end(); ++iter) {