summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2008-07-12 14:28:25 +0000
committerjohanengelen <johanengelen@users.sourceforge.net>2008-07-12 14:28:25 +0000
commit790d58c716c76d5fdf2cbbba2ea5b10721d195f3 (patch)
tree829e752bb4d6c0f88fdf59dc5c3fa0db0c22f401 /src
parentincrease font size on kerning_preview and text_preview drawing areas (diff)
downloadinkscape-790d58c716c76d5fdf2cbbba2ea5b10721d195f3.tar.gz
inkscape-790d58c716c76d5fdf2cbbba2ea5b10721d195f3.zip
Don't crash on path parse error. Truncate the path data up to where it is valid.
For now shows unsafe debug message about where the path was truncated. (bzr r6272)
Diffstat (limited to 'src')
-rw-r--r--src/svg/svg-path.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/svg/svg-path.cpp b/src/svg/svg-path.cpp
index 1ab70d101..3deb6105c 100644
--- a/src/svg/svg-path.cpp
+++ b/src/svg/svg-path.cpp
@@ -36,6 +36,7 @@
#include "libnr/n-art-bpath.h"
#include "gnome-canvas-bpath-util.h"
+#include "svg/svg.h"
#include "svg/path-string.h"
#include <2geom/pathvector.h>
@@ -674,20 +675,28 @@ NArtBpath *sp_svg_read_path(gchar const *str)
return bpath;
}
+/*
+ * Parses the path in str. When an error is found in the pathstring, this method
+ * returns a truncated path up to where the error was found in the pathstring.
+ * Returns an empty PathVector when str==NULL
+ */
Geom::PathVector sp_svg_read_pathv(char const * str)
{
- std::vector<Geom::Path> pathv;
+ Geom::PathVector pathv;
if (!str)
return pathv; // return empty pathvector when str == NULL
+
+ typedef std::back_insert_iterator<Geom::PathVector> Inserter;
+ Inserter iter(pathv);
+ Geom::SVGPathGenerator<Inserter> generator(iter);
+
try {
- pathv = Geom::parse_svg_path(str);
+ Geom::parse_svg_path(str, generator);
}
catch (Geom::SVGPathParseError e) {
- g_warning("SVGPathParseError: %s", e.what());
- g_warning("svgd str: %s", str);
- throw Geom::SVGPathParseError(); // rethrow, maybe not necessary, can instead return empty path?
- return std::vector<Geom::Path>();
+ generator.finish();
+ g_warning("Malformed SVG path, truncated path up to where error was found.\n Input path=\"%s\"\n Parsed path=\"%s\"", str, sp_svg_write_path(pathv));
}
return pathv;