summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/cdr-input.cpp
diff options
context:
space:
mode:
authorEduard Braun <eduard.braun2@gmx.de>2016-02-14 17:35:49 +0000
committerEduard Braun <eduard.braun2@gmx.de>2016-02-14 17:35:49 +0000
commit50addf8b79d80608e9a37999861f55a20cdf19ae (patch)
tree47c1f6d3aeffcfc2485ff87e8d86551598c22ef1 /src/extension/internal/cdr-input.cpp
parentTranslations: Update inkscape.pot file (diff)
downloadinkscape-50addf8b79d80608e9a37999861f55a20cdf19ae.tar.gz
inkscape-50addf8b79d80608e9a37999861f55a20cdf19ae.zip
Fix for bug 1478168 (CDR import crashes)
Fixed bugs: - https://launchpad.net/bugs/1478168 (bzr r14650)
Diffstat (limited to 'src/extension/internal/cdr-input.cpp')
-rw-r--r--src/extension/internal/cdr-input.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/extension/internal/cdr-input.cpp b/src/extension/internal/cdr-input.cpp
index f4789a08f..c8df804bc 100644
--- a/src/extension/internal/cdr-input.cpp
+++ b/src/extension/internal/cdr-input.cpp
@@ -22,6 +22,7 @@
#include <string>
#include <cstring>
+#include <glibmm/regex.h>
#include <libcdr/libcdr.h>
@@ -281,7 +282,12 @@ SPDocument *CdrInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * u
}
}
- SPDocument * doc = SPDocument::createNewDocFromMem(tmpSVGOutput[page_num-1].cstr(), strlen(tmpSVGOutput[page_num-1].cstr()), TRUE);
+ // remove consecutive closepath commands (see bug 1492153)
+ Glib::RefPtr<Glib::Regex> regex = Glib::Regex::create("(Z(?:[\n\s]+Z)+)(?=[^<]+\")");
+ Glib::ustring outString1 = Glib::ustring(tmpSVGOutput[page_num-1].cstr());
+ Glib::ustring outString2 = regex->replace(outString1, 0, "Z", Glib::REGEX_MATCH_NEWLINE_ANY);
+
+ SPDocument * doc = SPDocument::createNewDocFromMem(outString2.c_str(), outString2.bytes(), TRUE);
// Set viewBox if it doesn't exist
if (doc && !doc->getRoot()->viewBox_set) {