summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUmesh Kadam <umesh.kadam@synerzip.com>2014-06-13 17:26:19 +0530
committerMichael Stahl <mstahl@redhat.com>2014-07-30 17:54:47 +0200
commit77ab92bfae9cd32f50e993e0fd8cdec4e6e4a2ff (patch)
treefc5d68432d2aceec8347c98043aed0469fc41757
parentb76427635b8f00ac5b3eeda4dbe77f1e6d56f29b (diff)
fdo#78904 : LO hangs while saving the document.
- In case of framePr attributes being omitted in original xml, LO defaults such attributes to incorrect values. - Correcting these values in this fix. - This fix stops LO from getting hang while saving the document, the actual fix needs to be somewhere in the table layout. We need to restrict the frame from being considered as part of the table as MSO does not allow frame to be part of a table. Reviewed-on: https://gerrit.libreoffice.org/9774 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Miklos Vajna <vmiklos@collabora.co.uk> (cherry picked from commit 75fc9e669f209472ec6a282848166d96d02d84d9) This also fixes fdo#79391. Change-Id: I4c35f7eff6ca1122901f5667fc26b849df527f60 Signed-off-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo78904_fileHang.docxbin0 -> 74704 bytes
-rw-r--r--sw/qa/extras/ooxmlimport/data/fdo78904.docxbin0 -> 14388 bytes
-rw-r--r--sw/qa/extras/ooxmlimport/ooxmlimport.cxx11
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx23
4 files changed, 28 insertions, 6 deletions
diff --git a/sw/qa/core/data/ooxml/pass/fdo78904_fileHang.docx b/sw/qa/core/data/ooxml/pass/fdo78904_fileHang.docx
new file mode 100644
index 000000000000..dce50f3dce1a
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo78904_fileHang.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlimport/data/fdo78904.docx b/sw/qa/extras/ooxmlimport/data/fdo78904.docx
new file mode 100644
index 000000000000..c171ae2ca813
--- /dev/null
+++ b/sw/qa/extras/ooxmlimport/data/fdo78904.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index de1e64174622..1dc616105164 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -1175,6 +1175,17 @@ DECLARE_OOXMLIMPORT_TEST(testToolsLineNumbering, "tools-line-numbering.docx")
CPPUNIT_ASSERT_EQUAL(sal_Int32(3), nValue);
}
+DECLARE_OOXMLIMPORT_TEST(testfdo78904, "fdo78904.docx")
+{
+ uno::Reference<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY);
+ if (xIndexAccess->getCount())
+ {
+ uno::Reference<beans::XPropertySet> xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(EMU_TO_MM100(0)), getProperty<sal_Int32>(xFrame, "HoriOrientPosition"));
+ }
+}
+
DECLARE_OOXMLIMPORT_TEST(testFdo60922, "fdo60922.docx")
{
// This was 0, not 100, due to wrong import of w:position w:val="0"
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index bdad3b161fe9..f6dc73ea1527 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -42,6 +42,7 @@
#include <com/sun/star/text/HoriOrientation.hpp>
#include <com/sun/star/text/VertOrientation.hpp>
#include <com/sun/star/text/ReferenceFieldPart.hpp>
+#include <com/sun/star/text/RelOrientation.hpp>
#include <com/sun/star/text/ReferenceFieldSource.hpp>
#include <com/sun/star/text/SizeType.hpp>
#include <com/sun/star/text/TextContentAnchorType.hpp>
@@ -807,6 +808,8 @@ void lcl_AddRangeAndStyle(
//define some default frame width - 0cm ATM: this allow the frame to be wrapped around the text
#define DEFAULT_FRAME_MIN_WIDTH 0
+#define DEFAULT_FRAME_MIN_HEIGHT 0
+#define DEFAULT_VALUE 0
void DomainMapper_Impl::CheckUnregisteredFrameConversion( )
{
@@ -860,7 +863,7 @@ void DomainMapper_Impl::CheckUnregisteredFrameConversion( )
pFrameProperties[1].Value <<=
rAppendContext.pLastParagraphProperties->Geth() > 0 ?
rAppendContext.pLastParagraphProperties->Geth() :
- pStyleProperties->Geth();
+ pStyleProperties->Geth() > 0 ? pStyleProperties->Geth() : DEFAULT_FRAME_MIN_HEIGHT;
pFrameProperties[2].Value <<= sal_Int16(
rAppendContext.pLastParagraphProperties->GethRule() >= 0 ?
@@ -875,13 +878,17 @@ void DomainMapper_Impl::CheckUnregisteredFrameConversion( )
pStyleProperties->GetxAlign() >= 0 ? pStyleProperties->GetxAlign() : text::HoriOrientation::NONE );
pFrameProperties[4].Value <<= nHoriOrient;
+ //set a non negative default value
pFrameProperties[5].Value <<=
rAppendContext.pLastParagraphProperties->IsxValid() ?
- rAppendContext.pLastParagraphProperties->Getx() : pStyleProperties->Getx();
+ rAppendContext.pLastParagraphProperties->Getx() :
+ pStyleProperties->IsxValid() ? pStyleProperties->Getx() : DEFAULT_VALUE;
+
+ //Default the anchor in case FramePr_hAnchor is missing ECMA 17.3.1.11
pFrameProperties[6].Value <<= sal_Int16(
rAppendContext.pLastParagraphProperties->GethAnchor() >= 0 ?
rAppendContext.pLastParagraphProperties->GethAnchor() :
- pStyleProperties->GethAnchor() );
+ pStyleProperties->GethAnchor() >=0 ? pStyleProperties->GethAnchor() : text::RelOrientation::FRAME );
sal_Int16 nVertOrient = sal_Int16(
rAppendContext.pLastParagraphProperties->GetyAlign() >= 0 ?
@@ -889,18 +896,22 @@ void DomainMapper_Impl::CheckUnregisteredFrameConversion( )
pStyleProperties->GetyAlign() >= 0 ? pStyleProperties->GetyAlign() : text::VertOrientation::NONE );
pFrameProperties[7].Value <<= nVertOrient;
+ //set a non negative default value
pFrameProperties[8].Value <<=
rAppendContext.pLastParagraphProperties->IsyValid() ?
- rAppendContext.pLastParagraphProperties->Gety() : pStyleProperties->Gety();
+ rAppendContext.pLastParagraphProperties->Gety() :
+ pStyleProperties->IsyValid() ? pStyleProperties->Gety() : DEFAULT_VALUE;
+
+ //Default the anchor in case FramePr_vAnchor is missing ECMA 17.3.1.11
pFrameProperties[9].Value <<= sal_Int16(
rAppendContext.pLastParagraphProperties->GetvAnchor() >= 0 ?
rAppendContext.pLastParagraphProperties->GetvAnchor() :
- pStyleProperties->GetvAnchor() );
+ pStyleProperties->GetvAnchor() >= 0 ? pStyleProperties->GetvAnchor() : text::RelOrientation::FRAME );
pFrameProperties[10].Value <<= text::WrapTextMode(
rAppendContext.pLastParagraphProperties->GetWrap() >= 0 ?
rAppendContext.pLastParagraphProperties->GetWrap() :
- pStyleProperties->GetWrap());
+ pStyleProperties->GetWrap() >= 0 ? pStyleProperties->GetWrap() : text::WrapTextMode_NONE );
/** FDO#73546 : distL & distR should be unsigned intgers <Ecma 20.4.3.6>
Swapped the array elements 11,12 & 13,14 since 11 & 12 are