oox/source/export/drawingml.cxx | 7 ++++- sw/qa/extras/ooxmlexport/data/FileWithInvalidImageLink.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 13 +++++++++ sw/source/filter/ww8/docxattributeoutput.cxx | 16 +++++++++--- 4 files changed, 31 insertions(+), 5 deletions(-)
New commits: commit 881ca9d48fc67665559484901ce6a670dc331ab8 Author: umeshkadam <umesh.ka...@synerzip.com> Date: Tue Mar 11 20:42:31 2014 +0530 FDO#76013 : If original file has image whose link is broken RT gets corrupted. - The original file contains an image which has invalid link. - since the link is invalid the import throws an exception while loading the image & the link is lost. - while exporting the system used to write an empty image for an unhandled graphic type, which is incorrect and the RT file would result in corrupt. - Fixed this issue and added UT. Conflicts: sw/qa/extras/ooxmlexport/ooxmlexport.cxx Reviewed on: https://gerrit.libreoffice.org/8549 Change-Id: If884f154d1fba921280d63930e7fccb979ea5608 diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index aeeff25..7d8ea84 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -779,7 +779,12 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic , bool bRelPathToMedia ) pExtension = ".emf"; } else { OSL_TRACE( "unhandled graphic type" ); - break; + /*Earlier, even in case of unhandled graphic types we were + proceeding to write the image, which would eventually + write an empty image with a zero size, and return a valid + relationID, which is incorrect. + */ + return sRelId; } aData = aStream.GetData(); diff --git a/sw/qa/extras/ooxmlexport/data/FileWithInvalidImageLink.docx b/sw/qa/extras/ooxmlexport/data/FileWithInvalidImageLink.docx new file mode 100644 index 0000000..6ad5cac Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/FileWithInvalidImageLink.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index 9a43735..2a2f7c8 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -2791,6 +2791,19 @@ DECLARE_OOXMLEXPORT_TEST(testFdo76016, "fdo76016.docx") assertXPath(pXmlDoc, "//a:graphic/a:graphicData/wps:wsp/wps:spPr/a:prstGeom/a:avLst/a:gd[2]", "name", "adj2"); } +DECLARE_OOXMLEXPORT_TEST(testFileWithInvalidImageLink, "FileWithInvalidImageLink.docx") +{ + /* In case if the original file has an image whose link is + invalid, then the RT file used to result in corruption + since the exported image would be an empty image. + */ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/w:drawing[1]/wp:inline[1]/a:graphic[1]/a:graphicData[1]/pic:pic[1]/pic:blipFill[1]/a:blip[1]", "embed", ""); +} + #endif CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index a380dd0..cfa3b47 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -3319,9 +3319,6 @@ void DocxAttributeOutput::FlyFrameGraphic( const SwGrfNode* pGrfNode, const Size nImageType = XML_embed; } - if ( aRelId.isEmpty() ) - return; - m_rExport.SdrExporter().startDMLAnchorInline(pFrmFmt, rSize); // picture description (used for pic:cNvPr later too) @@ -3383,7 +3380,18 @@ void DocxAttributeOutput::FlyFrameGraphic( const SwGrfNode* pGrfNode, const Size // the actual picture m_pSerializer->startElementNS( XML_pic, XML_blipFill, FSEND ); - m_pSerializer->singleElementNS( XML_a, XML_blip, + +/* At this point we are certain that, WriteImage returns empty RelId + for unhandled graphic type. Therefore we write the picture description + and not the relation( coz there ain't any), so that the user knows + there is a image/graphic in the doc but it is broken instead of + completely discarding it. +*/ + if ( aRelId.isEmpty() ) + m_pSerializer->singleElementNS( XML_a, XML_blip, + FSEND ); + else + m_pSerializer->singleElementNS( XML_a, XML_blip, FSNS( XML_r, nImageType ), aRelId.getStr(), FSEND ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits