From b8eb5d0cdf402129cb236ffaea87ceaeac3319df Mon Sep 17 00:00:00 2001 From: Fridrich Štrba Date: Fri, 1 Apr 2011 15:37:55 +0200 Subject: Handle corrupted WP6 prefixes graciously --- libwpd/libwpd.corruptedprefix.patch | 107 ++++++++++++++++++++++++++++++++++++ libwpd/makefile.mk | 3 +- 2 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 libwpd/libwpd.corruptedprefix.patch (limited to 'libwpd') diff --git a/libwpd/libwpd.corruptedprefix.patch b/libwpd/libwpd.corruptedprefix.patch new file mode 100644 index 000000000000..1fa051f49eb8 --- /dev/null +++ b/libwpd/libwpd.corruptedprefix.patch @@ -0,0 +1,107 @@ +--- misc/libwpd-0.9.1/src/lib/WP6PrefixDataPacket.cpp ++++ misc/build/libwpd-0.9.1/src/lib/WP6PrefixDataPacket.cpp +@@ -46,45 +46,67 @@ WP6PrefixDataPacket::WP6PrefixDataPacket(WPXInputStream * /* input */, WPXEncryp + } + + WP6PrefixDataPacket * WP6PrefixDataPacket::constructPrefixDataPacket(WPXInputStream * input, WPXEncryption *encryption, WP6PrefixIndice *prefixIndice) +-{ +- switch (prefixIndice->getType()) ++{ ++ WP6PrefixDataPacket *tmpPacket = 0; ++ try ++ { ++ switch (prefixIndice->getType()) ++ { ++ case WP6_INDEX_HEADER_INITIAL_FONT: ++ tmpPacket = new WP6DefaultInitialFontPacket(input, encryption, prefixIndice->getID(), ++ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); ++ break; ++ case WP6_INDEX_HEADER_GENERAL_WORDPERFECT_TEXT: ++ tmpPacket = new WP6GeneralTextPacket(input, encryption, prefixIndice->getID(), ++ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); ++ break; ++ case WP6_INDEX_HEADER_DESIRED_FONT_DESCRIPTOR_POOL: ++ tmpPacket = new WP6FontDescriptorPacket(input, encryption, prefixIndice->getID(), ++ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); ++ break; ++ case WP6_INDEX_HEADER_FILL_STYLE: ++ tmpPacket = new WP6FillStylePacket(input, encryption, prefixIndice->getID(), ++ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); ++ break; ++ case WP6_INDEX_HEADER_EXTENDED_DOCUMENT_SUMMARY: ++ tmpPacket = new WP6ExtendedDocumentSummaryPacket(input, encryption, prefixIndice->getID(), ++ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); ++ break; ++ case WP6_INDEX_HEADER_OUTLINE_STYLE: ++ tmpPacket = new WP6OutlineStylePacket(input, encryption, prefixIndice->getID(), ++ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); ++ break; ++ case WP6_INDEX_HEADER_GRAPHICS_FILENAME: ++ tmpPacket = new WP6GraphicsFilenamePacket(input, encryption, prefixIndice->getID(), prefixIndice->getFlags(), ++ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); ++ break; ++ case WP6_INDEX_HEADER_GRAPHICS_CACHED_FILE_DATA: ++ tmpPacket = new WP6GraphicsCachedFileDataPacket(input, encryption, prefixIndice->getID(), ++ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); ++ break; ++ case WP6_INDEX_HEADER_GRAPHICS_BOX_STYLE: ++ tmpPacket = new WP6GraphicsBoxStylePacket(input, encryption, prefixIndice->getID(), ++ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); ++ break; ++ case WP6_INDEX_HEADER_TABLE_STYLE: ++ tmpPacket = new WP6TableStylePacket(input, encryption, prefixIndice->getID(), ++ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); ++ break; ++ case WP6_INDEX_HEADER_COMMENT_ANNOTATION: ++ tmpPacket = new WP6CommentAnnotationPacket(input, encryption, prefixIndice->getID(), ++ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); ++ break; ++ default: ++ break;; ++ } ++ } ++ catch (FileException) + { +- case WP6_INDEX_HEADER_INITIAL_FONT: +- return new WP6DefaultInitialFontPacket(input, encryption, prefixIndice->getID(), +- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); +- case WP6_INDEX_HEADER_GENERAL_WORDPERFECT_TEXT: +- return new WP6GeneralTextPacket(input, encryption, prefixIndice->getID(), +- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); +- case WP6_INDEX_HEADER_DESIRED_FONT_DESCRIPTOR_POOL: +- return new WP6FontDescriptorPacket(input, encryption, prefixIndice->getID(), +- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); +- case WP6_INDEX_HEADER_FILL_STYLE: +- return new WP6FillStylePacket(input, encryption, prefixIndice->getID(), +- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); +- case WP6_INDEX_HEADER_EXTENDED_DOCUMENT_SUMMARY: +- return new WP6ExtendedDocumentSummaryPacket(input, encryption, prefixIndice->getID(), +- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); +- case WP6_INDEX_HEADER_OUTLINE_STYLE: +- return new WP6OutlineStylePacket(input, encryption, prefixIndice->getID(), +- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); +- case WP6_INDEX_HEADER_GRAPHICS_FILENAME: +- return new WP6GraphicsFilenamePacket(input, encryption, prefixIndice->getID(), prefixIndice->getFlags(), +- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); +- case WP6_INDEX_HEADER_GRAPHICS_CACHED_FILE_DATA: +- return new WP6GraphicsCachedFileDataPacket(input, encryption, prefixIndice->getID(), +- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); +- case WP6_INDEX_HEADER_GRAPHICS_BOX_STYLE: +- return new WP6GraphicsBoxStylePacket(input, encryption, prefixIndice->getID(), +- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); +- case WP6_INDEX_HEADER_TABLE_STYLE: +- return new WP6TableStylePacket(input, encryption, prefixIndice->getID(), +- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); +- case WP6_INDEX_HEADER_COMMENT_ANNOTATION: +- return new WP6CommentAnnotationPacket(input, encryption, prefixIndice->getID(), +- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); +- default: +- return 0; ++ if (tmpPacket) ++ delete tmpPacket; ++ tmpPacket = 0; + } ++ return tmpPacket; + } + + void WP6PrefixDataPacket::_read(WPXInputStream *input, WPXEncryption *encryption, uint32_t dataOffset, uint32_t dataSize) diff --git a/libwpd/makefile.mk b/libwpd/makefile.mk index 40b186d0147e..717facb07f6e 100644 --- a/libwpd/makefile.mk +++ b/libwpd/makefile.mk @@ -43,7 +43,8 @@ TARGET=wpd TARFILE_NAME=libwpd-0.9.1 TARFILE_MD5=5ff846847dab351604ad859e2fd4ed3c -PATCH_FILES=libwpd.gcc460.patch +PATCH_FILES=libwpd.gcc460.patch \ + libwpd.corruptedprefix.patch BUILD_ACTION=dmake $(MFLAGS) $(CALLMACROS) BUILD_DIR=src$/lib -- cgit v1.2.3