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

Stephan Bergmann sbergman at redhat.com
Mon Jul 13 05:08:35 PDT 2015


 configmgr/qa/unit/test.cxx  |    5 +++--
 configmgr/source/access.cxx |   12 ++++++------
 2 files changed, 9 insertions(+), 8 deletions(-)

New commits:
commit e80df0d58ba32e3041ff9c8cdea9c617ea7e633b
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Jul 13 14:07:38 2015 +0200

    tdf#92639: Slashes are allowed in set member names, of course
    
    Change-Id: I30944fe9611e83566c891a7d1461ad02979daddd

diff --git a/configmgr/qa/unit/test.cxx b/configmgr/qa/unit/test.cxx
index 544a808..a9f609b 100644
--- a/configmgr/qa/unit/test.cxx
+++ b/configmgr/qa/unit/test.cxx
@@ -315,8 +315,9 @@ void Test::testInsertSetMember() {
     } catch (css::lang::IllegalArgumentException &) {}
     try {
         access->insertByName("a/b", css::uno::makeAny(member));
-        CPPUNIT_FAIL("expected IllegalArgumentException");
-    } catch (css::lang::IllegalArgumentException &) {}
+    } catch (css::lang::IllegalArgumentException &) {
+        CPPUNIT_FAIL("unexpected IllegalArgumentException");
+    }
     css::uno::Reference<css::util::XChangesBatch>(
         access, css::uno::UNO_QUERY_THROW)->commitChanges();
     css::uno::Reference<css::lang::XComponent>(
diff --git a/configmgr/source/access.cxx b/configmgr/source/access.cxx
index b8fadbc..fa2930a 100644
--- a/configmgr/source/access.cxx
+++ b/configmgr/source/access.cxx
@@ -109,12 +109,12 @@ namespace {
 // Conservatively forbid what is either not an XML Char (including lone
 // surrogates, even though they should not appear in well-formed UNO OUString
 // instances anyway), or is a slash (as it causes problems in path syntax):
-bool isValidName(OUString const & name) {
+bool isValidName(OUString const & name, bool setMember) {
     for (sal_Int32 i = 0; i != name.getLength();) {
         sal_uInt32 c = name.iterateCodePoints(&i);
         if ((c < 0x20 && !(c == 0x09 || c == 0x0A || c == 0x0D))
             || rtl::isHighSurrogate(c) || rtl::isLowSurrogate(c) || c == 0xFFFE
-            || c == 0xFFFF || c == '/')
+            || c == 0xFFFF || (!setMember && c == '/'))
         {
             return false;
         }
@@ -669,7 +669,7 @@ void Access::setName(OUString const & aName)
                         if (node->getMandatory() == Data::NO_LAYER &&
                             !(other.is() && other->isFinalized()))
                         {
-                            if (!isValidName(aName)) {
+                            if (!isValidName(aName, true)) {
                                 throw css::uno::RuntimeException(
                                     "invalid element name " + aName);
                             }
@@ -1188,7 +1188,7 @@ void Access::insertByName(
         Modifications localMods;
         switch (getNode()->kind()) {
         case Node::KIND_LOCALIZED_PROPERTY:
-            if (!isValidName(aName)) {
+            if (!isValidName(aName, false)) {
                 throw css::lang::IllegalArgumentException(
                     aName, static_cast<cppu::OWeakObject *>(this), 0);
             }
@@ -1196,7 +1196,7 @@ void Access::insertByName(
             break;
         case Node::KIND_GROUP:
             {
-                if (!isValidName(aName)) {
+                if (!isValidName(aName, false)) {
                     throw css::lang::IllegalArgumentException(
                         aName, static_cast<cppu::OWeakObject *>(this), 0);
                 }
@@ -1212,7 +1212,7 @@ void Access::insertByName(
             break;
         case Node::KIND_SET:
             {
-                if (!isValidName(aName)) {
+                if (!isValidName(aName, true)) {
                     throw css::lang::IllegalArgumentException(
                         aName, static_cast<cppu::OWeakObject *>(this), 0);
                 }


More information about the Libreoffice-commits mailing list