[Libreoffice-commits] core.git: 2 commits - sc/qa sc/source
Kohei Yoshida
kohei.yoshida at collabora.com
Fri May 16 20:08:39 PDT 2014
sc/qa/unit/ucalc.cxx | 25 +++++++++++++++++++++++++
sc/qa/unit/ucalc.hxx | 2 ++
sc/source/core/data/column4.cxx | 4 ++++
3 files changed, 31 insertions(+)
New commits:
commit bc7e0967be52f5eb7948fbb1c30edc7dd5acc18d
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Fri May 16 23:06:33 2014 -0400
fdo#77735: Don't proceed when all cells in the range are empty.
That means there is nothing to delete, and proceeding would cause Calc
to freeze.
Change-Id: I2a8fb5736870ba459082873c8f864283d8b9c664
diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx
index c5465c6..4acb374 100644
--- a/sc/source/core/data/column4.cxx
+++ b/sc/source/core/data/column4.cxx
@@ -59,6 +59,10 @@ void ScColumn::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const Sc
sc::SingleColumnSpanSet::SpansType aSpans;
aSpanSet.getSpans(aSpans);
+ if (aSpans.empty())
+ // All cells in the range in the clip are empty. Nothing to delete.
+ return;
+
// Translate the clip column spans into the destination column, and repeat as needed.
std::vector<sc::RowSpan> aDestSpans;
SCROW nDestOffset = aRange.mnRow1 - nClipRow1;
commit 30cc43a56d63ba9ffd588ebc589e3576483d7141
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Fri May 16 23:05:40 2014 -0400
fdo#77735: Write test for this. This test will freeze with the bug present.
Change-Id: I7b7e67fe2ee59b57ce74f8303d30bebc84f6b0d0
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index 14a323b..b086711 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -3706,6 +3706,31 @@ void Test::testCopyPasteSkipEmpty()
m_pDoc->DeleteTab(0);
}
+void Test::testCopyPasteSkipEmpty2()
+{
+ m_pDoc->InsertTab(0, "Test");
+
+ m_pDoc->SetString(ScAddress(0,0,0), "A");
+ m_pDoc->SetString(ScAddress(2,0,0), "C");
+
+ // Copy A1:C1 to clipboard.
+ ScDocument aClipDoc(SCDOCMODE_CLIP);
+ aClipDoc.ResetClip(m_pDoc, static_cast<SCTAB>(0));
+ copyToClip(m_pDoc, ScRange(0,0,0,2,0,0), &aClipDoc);
+
+ // Paste to A3 with the skip empty option set. This used to freeze. (fdo#77735)
+ ScRange aDestRange(0,2,0,2,2,0);
+ ScMarkData aMark;
+ aMark.SetMarkArea(aDestRange);
+ m_pDoc->CopyFromClip(aDestRange, aMark, IDF_ALL, NULL, &aClipDoc, false, false, true, true);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("A"), m_pDoc->GetString(ScAddress(0,2,0)));
+ CPPUNIT_ASSERT_MESSAGE("B3 should be empty.", m_pDoc->GetCellType(ScAddress(1,2,0)) == CELLTYPE_NONE);
+ CPPUNIT_ASSERT_EQUAL(OUString("C"), m_pDoc->GetString(ScAddress(2,2,0)));
+
+ m_pDoc->DeleteTab(0);
+}
+
void Test::testCopyPasteSkipEmptyConditionalFormatting()
{
m_pDoc->InsertTab(0, "Test");
diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 35d57ce..66fbfd5 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -273,6 +273,7 @@ public:
void testCopyPasteTranspose();
void testCopyPasteMultiRange();
void testCopyPasteSkipEmpty();
+ void testCopyPasteSkipEmpty2();
void testCopyPasteSkipEmptyConditionalFormatting();
void testCutPasteRefUndo();
void testUndoCut();
@@ -469,6 +470,7 @@ public:
CPPUNIT_TEST(testCopyPasteTranspose);
CPPUNIT_TEST(testCopyPasteMultiRange);
CPPUNIT_TEST(testCopyPasteSkipEmpty);
+ CPPUNIT_TEST(testCopyPasteSkipEmpty2);
//CPPUNIT_TEST(testCopyPasteSkipEmptyConditionalFormatting);
CPPUNIT_TEST(testCutPasteRefUndo);
CPPUNIT_TEST(testUndoCut);
More information about the Libreoffice-commits
mailing list