[Libreoffice-commits] core.git: 2 commits - sc/qa sc/source

Eike Rathke erack at redhat.com
Wed Aug 26 12:01:18 PDT 2015


 sc/qa/unit/ucalc_formula.cxx    |   33 +++++++++++++++++++++++++++++++++
 sc/source/core/tool/address.cxx |   11 +++++++++--
 2 files changed, 42 insertions(+), 2 deletions(-)

New commits:
commit a7e273755095e4b97c05a63ab39aa09f8aa755a4
Author: Eike Rathke <erack at redhat.com>
Date:   Wed Aug 26 13:14:45 2015 +0200

    unit test that parsing range fragments should fail
    
    Change-Id: Iff5ef2a5b2315b19cf8f0e84a08c776c3c97e0ae

diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx
index 8a5d766..0e379f1 100644
--- a/sc/qa/unit/ucalc_formula.cxx
+++ b/sc/qa/unit/ucalc_formula.cxx
@@ -321,6 +321,39 @@ void Test::testFormulaParseReference()
     CPPUNIT_ASSERT_MESSAGE("This is not an external address.", !aExtInfo.mbExternal);
 
     ScRange aRange;
+
+    aRange.aStart.SetTab(0);
+    nRes = aRange.Parse(":B", m_pDoc, formula::FormulaGrammar::CONV_OOO);
+    CPPUNIT_ASSERT_MESSAGE("Should fail to parse.", (nRes & SCA_VALID) == 0);
+
+    aRange.aStart.SetTab(0);
+    nRes = aRange.Parse("B:", m_pDoc, formula::FormulaGrammar::CONV_OOO);
+    CPPUNIT_ASSERT_MESSAGE("Should fail to parse.", (nRes & SCA_VALID) == 0);
+
+    aRange.aStart.SetTab(0);
+    nRes = aRange.Parse(":B2", m_pDoc, formula::FormulaGrammar::CONV_OOO);
+    CPPUNIT_ASSERT_MESSAGE("Should fail to parse.", (nRes & SCA_VALID) == 0);
+
+    aRange.aStart.SetTab(0);
+    nRes = aRange.Parse("B2:", m_pDoc, formula::FormulaGrammar::CONV_OOO);
+    CPPUNIT_ASSERT_MESSAGE("Should fail to parse.", (nRes & SCA_VALID) == 0);
+
+    aRange.aStart.SetTab(0);
+    nRes = aRange.Parse(":2", m_pDoc, formula::FormulaGrammar::CONV_OOO);
+    CPPUNIT_ASSERT_MESSAGE("Should fail to parse.", (nRes & SCA_VALID) == 0);
+
+    aRange.aStart.SetTab(0);
+    nRes = aRange.Parse("2:", m_pDoc, formula::FormulaGrammar::CONV_OOO);
+    CPPUNIT_ASSERT_MESSAGE("Should fail to parse.", (nRes & SCA_VALID) == 0);
+
+    aRange.aStart.SetTab(0);
+    nRes = aRange.Parse(":2B", m_pDoc, formula::FormulaGrammar::CONV_OOO);
+    CPPUNIT_ASSERT_MESSAGE("Should fail to parse.", (nRes & SCA_VALID) == 0);
+
+    aRange.aStart.SetTab(0);
+    nRes = aRange.Parse("2B:", m_pDoc, formula::FormulaGrammar::CONV_OOO);
+    CPPUNIT_ASSERT_MESSAGE("Should fail to parse.", (nRes & SCA_VALID) == 0);
+
     aRange.aStart.SetTab(0);
     nRes = aRange.Parse("B:B", m_pDoc, formula::FormulaGrammar::CONV_OOO);
     CPPUNIT_ASSERT_MESSAGE("Failed to parse.", (nRes & SCA_VALID) != 0);
commit 56238d58a7da705e4e91604964e6564d819a9196
Author: Eike Rathke <erack at redhat.com>
Date:   Wed Aug 26 13:06:05 2015 +0200

    do not parse range fragments as valid ranges
    
    For example, "B2:" or ":B2" were accepted as valid range, with the
    missing part set to A1, which resulted in a A1:B2 range.
    
    An omitted sheet specifier always results in a valid relative sheet,
    hence that flag is set, so testing flags for non-null before the final
    result is available isn't sufficient.
    
    Additionally this revealed a flaw in handling of external references
    when loading documents if the original file name differs from the
    resulting real file name due to relative paths.
    
    Actually now the displayed file name matches the real file name when
    such a document was loaded, where before the original file name was
    displayed.
    
    Probably such references didn't even work before if the reference
    spanned more than one sheet, which is a rather rare case for external
    references.
    
    Change-Id: I38035f2e4b3a11c0280457498cf62b02f882d2a1

diff --git a/sc/source/core/tool/address.cxx b/sc/source/core/tool/address.cxx
index 81e4047..8973f9d 100644
--- a/sc/source/core/tool/address.cxx
+++ b/sc/source/core/tool/address.cxx
@@ -1198,7 +1198,14 @@ static sal_uInt16 lcl_ScAddress_Parse_OOo( const sal_Unicode* p, ScDocument* pDo
             // Need document name if inherited.
             if (bExtDocInherited)
             {
-                const OUString* pFileName = pRefMgr->getExternalFileName( pExtInfo->mnFileId);
+                // The FileId was created using the original file name, so
+                // obtain that. Otherwise lcl_ScRange_External_TabSpan() would
+                // retrieve a FileId for the real name and bail out if that
+                // differed from pExtInfo->mnFileId, as is the case when
+                // loading documents that refer external files relative to the
+                // current own document but were saved from a different path
+                // than loaded.
+                const OUString* pFileName = pRefMgr->getExternalFileName( pExtInfo->mnFileId, true);
                 if (pFileName)
                     aDocName = *pFileName;
                 else
@@ -1505,7 +1512,7 @@ static sal_uInt16 lcl_ScRange_Parse_OOo( ScRange& rRange,
                     nRes2 |= SCA_COL_ABSOLUTE;
                 }
             }
-            if (nRes1 && nRes2)
+            if ((nRes1 & SCA_VALID) && (nRes2 & SCA_VALID))
             {
                 // PutInOrder / Justify
                 sal_uInt16 nMask, nBits1, nBits2;


More information about the Libreoffice-commits mailing list