diff options
author | Julien Nabet <serval2412@yahoo.fr> | 2012-06-14 21:57:06 +0200 |
---|---|---|
committer | Julien Nabet <serval2412@yahoo.fr> | 2012-06-14 22:03:12 +0200 |
commit | cc85e1303fbdf7d1ff9c5b63ed9942206b53ddac (patch) | |
tree | 2154cf06e8e1d393bf3f55e7477196676ffe9c68 /libvisio | |
parent | 61c6c7f8f72bd9a4a9e92a16ebe31b1621343c43 (diff) |
Resolves: fdo#50988
Fix Draw crashes on loading MS Logical Design Diagram example visio file
It was a problem with an iterator. The comparison was OK only on "else" part.
In the "if" part, iterators are from different sequences.
Change-Id: I1ccc82a1c24289c0c2e89ef0275f0f5163dc8a8d
Diffstat (limited to 'libvisio')
-rw-r--r-- | libvisio/libvisio-0.0.17-fdo50988.patch | 27 | ||||
-rw-r--r-- | libvisio/makefile.mk | 1 |
2 files changed, 28 insertions, 0 deletions
diff --git a/libvisio/libvisio-0.0.17-fdo50988.patch b/libvisio/libvisio-0.0.17-fdo50988.patch new file mode 100644 index 000000000000..50b2dbac64ce --- /dev/null +++ b/libvisio/libvisio-0.0.17-fdo50988.patch @@ -0,0 +1,27 @@ +--- misc/build/libvisio-0.0.17/src/lib/VSDXContentCollector.cpp 2012-06-12 20:44:51.773937254 +0200 ++++ misc/libvisio-0.0.17/src/lib/VSDXContentCollector.cpp 2012-06-14 21:38:10.947384110 +0200 +@@ -1601,6 +1601,7 @@ + void libvisio::VSDXContentCollector::collectPolylineTo(unsigned id, unsigned level, double x, double y, unsigned dataID) + { + std::map<unsigned, PolylineData>::const_iterator iter; ++ std::map<unsigned, PolylineData>::const_iterator iterEnd; + if (dataID == 0xFFFFFFFE) // Use stencil polyline data + { + if (!m_stencilShape || m_stencilShape->m_geometries.size() < m_currentGeometryCount) +@@ -1613,13 +1614,15 @@ + VSDXGeometryListElement *element = m_stencilShape->m_geometries[m_currentGeometryCount-1].getElement(id); + dataID = dynamic_cast<VSDXPolylineTo2 *>(element)->m_dataID; + iter = m_stencilShape->m_polylineData.find(dataID); ++ iterEnd = m_stencilShape->m_polylineData.end(); + } + else // No stencils involved, directly get dataID + { + iter = m_polylineData.find(dataID); ++ iterEnd = m_polylineData.end(); + } + +- if (iter != m_polylineData.end()) ++ if (iter != iterEnd) + { + PolylineData data = iter->second; + collectPolylineTo(id, level, x, y, data.xType, data.yType, data.points); diff --git a/libvisio/makefile.mk b/libvisio/makefile.mk index ac76289dd7f5..305a32b07bf8 100644 --- a/libvisio/makefile.mk +++ b/libvisio/makefile.mk @@ -58,6 +58,7 @@ TARFILE_NAME=libvisio-0.0.17 TARFILE_MD5=90010e213dd25648e70f0cc12f8fed55 PATCH_FILES=\ + $(TARFILE_NAME)-fdo50988.patch \ $(TARFILE_NAME).patch BUILD_ACTION=dmake $(MFLAGS) $(CALLMACROS) |