tdf#92639: Slashes are allowed in set member names, of course

Change-Id: I30944fe9611e83566c891a7d1461ad02979daddd
This commit is contained in:
Stephan Bergmann
2015-07-13 14:07:38 +02:00
parent 888f51c749
commit e80df0d58b
2 changed files with 9 additions and 8 deletions

View File

@@ -315,8 +315,9 @@ void Test::testInsertSetMember() {
} catch (css::lang::IllegalArgumentException &) {} } catch (css::lang::IllegalArgumentException &) {}
try { try {
access->insertByName("a/b", css::uno::makeAny(member)); 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>( css::uno::Reference<css::util::XChangesBatch>(
access, css::uno::UNO_QUERY_THROW)->commitChanges(); access, css::uno::UNO_QUERY_THROW)->commitChanges();
css::uno::Reference<css::lang::XComponent>( css::uno::Reference<css::lang::XComponent>(

View File

@@ -109,12 +109,12 @@ namespace {
// Conservatively forbid what is either not an XML Char (including lone // Conservatively forbid what is either not an XML Char (including lone
// surrogates, even though they should not appear in well-formed UNO OUString // 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): // 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();) { for (sal_Int32 i = 0; i != name.getLength();) {
sal_uInt32 c = name.iterateCodePoints(&i); sal_uInt32 c = name.iterateCodePoints(&i);
if ((c < 0x20 && !(c == 0x09 || c == 0x0A || c == 0x0D)) if ((c < 0x20 && !(c == 0x09 || c == 0x0A || c == 0x0D))
|| rtl::isHighSurrogate(c) || rtl::isLowSurrogate(c) || c == 0xFFFE || rtl::isHighSurrogate(c) || rtl::isLowSurrogate(c) || c == 0xFFFE
|| c == 0xFFFF || c == '/') || c == 0xFFFF || (!setMember && c == '/'))
{ {
return false; return false;
} }
@@ -669,7 +669,7 @@ void Access::setName(OUString const & aName)
if (node->getMandatory() == Data::NO_LAYER && if (node->getMandatory() == Data::NO_LAYER &&
!(other.is() && other->isFinalized())) !(other.is() && other->isFinalized()))
{ {
if (!isValidName(aName)) { if (!isValidName(aName, true)) {
throw css::uno::RuntimeException( throw css::uno::RuntimeException(
"invalid element name " + aName); "invalid element name " + aName);
} }
@@ -1188,7 +1188,7 @@ void Access::insertByName(
Modifications localMods; Modifications localMods;
switch (getNode()->kind()) { switch (getNode()->kind()) {
case Node::KIND_LOCALIZED_PROPERTY: case Node::KIND_LOCALIZED_PROPERTY:
if (!isValidName(aName)) { if (!isValidName(aName, false)) {
throw css::lang::IllegalArgumentException( throw css::lang::IllegalArgumentException(
aName, static_cast<cppu::OWeakObject *>(this), 0); aName, static_cast<cppu::OWeakObject *>(this), 0);
} }
@@ -1196,7 +1196,7 @@ void Access::insertByName(
break; break;
case Node::KIND_GROUP: case Node::KIND_GROUP:
{ {
if (!isValidName(aName)) { if (!isValidName(aName, false)) {
throw css::lang::IllegalArgumentException( throw css::lang::IllegalArgumentException(
aName, static_cast<cppu::OWeakObject *>(this), 0); aName, static_cast<cppu::OWeakObject *>(this), 0);
} }
@@ -1212,7 +1212,7 @@ void Access::insertByName(
break; break;
case Node::KIND_SET: case Node::KIND_SET:
{ {
if (!isValidName(aName)) { if (!isValidName(aName, true)) {
throw css::lang::IllegalArgumentException( throw css::lang::IllegalArgumentException(
aName, static_cast<cppu::OWeakObject *>(this), 0); aName, static_cast<cppu::OWeakObject *>(this), 0);
} }