src/lib/Fill.cpp | 4 ++-- src/lib/MSPUBCollector.cpp | 13 ++++++++++--- src/lib/MSPUBParser.cpp | 4 ++-- 3 files changed, 14 insertions(+), 7 deletions(-)
New commits: commit 95af3103bfed35a3aafe683b4fc33c761a2959c9 Author: David Tardon <dtar...@redhat.com> Date: Sat May 11 08:50:40 2013 +0200 avoid more vector index underflows diff --git a/src/lib/Fill.cpp b/src/lib/Fill.cpp index f563517..d9202c4 100644 --- a/src/lib/Fill.cpp +++ b/src/lib/Fill.cpp @@ -44,7 +44,7 @@ ImgFill::ImgFill(unsigned imgIndex, const MSPUBCollector *owner, bool isTexture, WPXPropertyListVector ImgFill::getProperties(WPXPropertyList *out) const { out->insert("draw:fill", "bitmap"); - if (m_imgIndex <= m_owner->m_images.size()) + if (m_imgIndex > 0 && m_imgIndex <= m_owner->m_images.size()) { const std::pair<ImgType, WPXBinaryData> &img = m_owner->m_images[m_imgIndex - 1]; out->insert("libwpg:mime-type", mimeByImgType(img.first)); @@ -73,7 +73,7 @@ WPXPropertyListVector PatternFill::getProperties(WPXPropertyList *out) const Color fgColor = m_fg.getFinalColor(m_owner->m_paletteColors); Color bgColor = m_bg.getFinalColor(m_owner->m_paletteColors); out->insert("draw:fill", "bitmap"); - if (m_imgIndex <= m_owner->m_images.size()) + if (m_imgIndex > 0 && m_imgIndex <= m_owner->m_images.size()) { const std::pair<ImgType, WPXBinaryData> &img = m_owner->m_images[m_imgIndex - 1]; const ImgType &type = img.first; diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp index b863b50..b8a96a9 100644 --- a/src/lib/MSPUBCollector.cpp +++ b/src/lib/MSPUBCollector.cpp @@ -1502,13 +1502,20 @@ void libmspub::MSPUBCollector::setHeightInEmu(unsigned long heightInEmu) bool libmspub::MSPUBCollector::addImage(unsigned index, ImgType type, WPXBinaryData img) { - MSPUB_DEBUG_MSG(("Image at index %d and of type 0x%x added.\n", index, type)); while (m_images.size() < index) { m_images.push_back(std::pair<ImgType, WPXBinaryData>(UNKNOWN, WPXBinaryData())); } - m_images[index - 1] = std::pair<ImgType, WPXBinaryData>(type, img); - return true; + if (index > 0) + { + MSPUB_DEBUG_MSG(("Image at index %d and of type 0x%x added.\n", index, type)); + m_images[index - 1] = std::pair<ImgType, WPXBinaryData>(type, img); + } + else + { + MSPUB_DEBUG_MSG(("0 is not a valid index for image, ignoring.\n")); + } + return index > 0; } WPXBinaryData *libmspub::MSPUBCollector::addBorderImage(ImgType type, diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp index 4d1e2ca..72f637e 100644 --- a/src/lib/MSPUBParser.cpp +++ b/src/lib/MSPUBParser.cpp @@ -1991,7 +1991,7 @@ boost::shared_ptr<libmspub::Fill> libmspub::MSPUBParser::getNewFill(const std::m if (ptr_rotation) rotation = (int)doubleModulo(toFixedPoint(*ptr_rotation), 360); const unsigned *ptr_bgPxId = getIfExists_const(foptProperties, FIELDID_BG_PXID); - if (ptr_bgPxId && *ptr_bgPxId <= m_escherDelayIndices.size() && m_escherDelayIndices[*ptr_bgPxId - 1] >= 0) + if (ptr_bgPxId && *ptr_bgPxId > 0 && *ptr_bgPxId <= m_escherDelayIndices.size() && m_escherDelayIndices[*ptr_bgPxId - 1] >= 0) { return boost::shared_ptr<Fill>(new ImgFill(m_escherDelayIndices[*ptr_bgPxId - 1], m_collector, fillType == TEXTURE, rotation)); } @@ -2005,7 +2005,7 @@ boost::shared_ptr<libmspub::Fill> libmspub::MSPUBParser::getNewFill(const std::m ColorReference fill = ptr_fillColor ? ColorReference(*ptr_fillColor) : ColorReference(0x00FFFFFF); // ColorReference back = ptr_fillBackColor ? ColorReference(*ptr_fillBackColor) : ColorReference(0x08000000); ColorReference back = ptr_fillBackColor ? ColorReference(*ptr_fillBackColor) : ColorReference(0x00FFFFFF); - if (ptr_bgPxId && *ptr_bgPxId <= m_escherDelayIndices.size() && m_escherDelayIndices[*ptr_bgPxId - 1 ] >= 0) + if (ptr_bgPxId && *ptr_bgPxId > 0 && *ptr_bgPxId <= m_escherDelayIndices.size() && m_escherDelayIndices[*ptr_bgPxId - 1] >= 0) { return boost::shared_ptr<Fill>(new PatternFill(m_escherDelayIndices[*ptr_bgPxId - 1], m_collector, fill, back)); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits