summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-01-05 09:08:21 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-01-05 10:05:58 +0100
commit627c2469843c9461b665c4571f1214aca7fc36a4 (patch)
tree5394782ae6aab87c3055a186408a67db64879fd1
parentf44bd6b0547c99b324e1a3f196c2296294e27b3c (diff)
tdf#96674 drawingML import: fix handling of zero width/height lines
Change-Id: If3d9f6272031e08ab228cfa58963d60ceede2498
-rw-r--r--oox/source/drawingml/shape.cxx13
-rw-r--r--sw/qa/extras/ooxmlimport/data/tdf96674.docxbin0 -> 14947 bytes
-rw-r--r--sw/qa/extras/ooxmlimport/ooxmlimport.cxx10
3 files changed, 22 insertions, 1 deletions
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 6f8475978a2b..2dc84e94052d 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -510,7 +510,18 @@ Reference< XShape > Shape::createAndInsert(
bool bIsWriter = xModelInfo->supportsService("com.sun.star.text.TextDocument");
for( i = 0; i < nNumPoints; ++i )
{
- const ::basegfx::B2DPoint aPoint( aPoly.getB2DPoint( i ) );
+ basegfx::B2DPoint aPoint( aPoly.getB2DPoint( i ) );
+
+ // Guard against zero width or height.
+ if (i)
+ {
+ const basegfx::B2DPoint& rPreviousPoint = aPoly.getB2DPoint(i - 1);
+ if (aPoint.getX() - rPreviousPoint.getX() == 0)
+ aPoint.setX(aPoint.getX() + 1);
+ if (aPoint.getY() - rPreviousPoint.getX() == 0)
+ aPoint.setY(aPoint.getY() + 1);
+ }
+
if (bIsWriter && bInGroup)
// Writer's draw page is in twips, and these points get passed
// to core without any unit conversion when Writer
diff --git a/sw/qa/extras/ooxmlimport/data/tdf96674.docx b/sw/qa/extras/ooxmlimport/data/tdf96674.docx
new file mode 100644
index 000000000000..752479c2ea16
--- /dev/null
+++ b/sw/qa/extras/ooxmlimport/data/tdf96674.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index ed5c7da0b1a2..3ab0c83886bc 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -3017,6 +3017,16 @@ DECLARE_OOXMLIMPORT_TEST(testTdf94043, "tdf94043.docx")
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), getProperty<sal_Int32>(xTextColumns, "SeparatorLineWidth"));
}
+DECLARE_OOXMLIMPORT_TEST(testTdf96674, "tdf96674.docx")
+{
+ uno::Reference<drawing::XShape> xShape(getShape(1), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xShape.is());
+ awt::Size aActualSize(xShape->getSize());
+ // This was 3493: the vertical line was horizontal.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), aActualSize.Width);
+ CPPUNIT_ASSERT(aActualSize.Height > 0);
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */