From 6228a80271462a26d409224e84d0e0a3b005c1d6 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Tue, 9 Jul 2013 19:48:21 +0200 Subject: fdo#65589: Treat legacy types.rdb w/o /UCR key as empty ...as they are encountered in the wild. Change-Id: Iae46d3b4b4aca18a09680caabc0e343f8a534989 (cherry picked from commit 87bad231d6f81c611ba145aea483a568623ca42e) --- unoidl/source/legacyprovider.cxx | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) (limited to 'unoidl') diff --git a/unoidl/source/legacyprovider.cxx b/unoidl/source/legacyprovider.cxx index 17b95dcd629c..a60424a8ceb6 100644 --- a/unoidl/source/legacyprovider.cxx +++ b/unoidl/source/legacyprovider.cxx @@ -96,16 +96,18 @@ Cursor::Cursor( RegistryKey const & key): manager_(manager), ucr_(ucr), key_(key), index_(0) { - prefix_ = key_.getName(); - if (!prefix_.endsWith("/")) { - prefix_ += "/"; - } - RegError e = key_.getKeyNames("", names_); - if (e != REG_NO_ERROR) { - throw FileFormatException( - key_.getRegistryName(), - ("legacy format: cannot get sub-key names of " + key_.getName() - + ": " + OUString::number(e))); + if (ucr_.isValid()) { + prefix_ = key_.getName(); + if (!prefix_.endsWith("/")) { + prefix_ += "/"; + } + RegError e = key_.getKeyNames("", names_); + if (e != REG_NO_ERROR) { + throw FileFormatException( + key_.getRegistryName(), + ("legacy format: cannot get sub-key names of " + key_.getName() + + ": " + OUString::number(e))); + } } } @@ -797,7 +799,11 @@ LegacyProvider::LegacyProvider( uri, "legacy format: cannot open root key: " + OUString::number(e)); } e = root.openKey("UCR", ucr_); - if (e != REG_NO_ERROR) { + switch (e) { + case REG_NO_ERROR: + case REG_KEY_NOT_EXISTS: // such effectively empty files exist in the wild + break; + default: throw FileFormatException( uri, "legacy format: cannot open UCR key: " + OUString::number(e)); } @@ -810,7 +816,9 @@ rtl::Reference< MapCursor > LegacyProvider::createRootCursor() const { rtl::Reference< Entity > LegacyProvider::findEntity(OUString const & name) const { - return readEntity(manager_, ucr_, ucr_, name.replace('.', '/'), true); + return ucr_.isValid() + ? readEntity(manager_, ucr_, ucr_, name.replace('.', '/'), true) + : rtl::Reference< Entity >(); } LegacyProvider::~LegacyProvider() throw () {} -- cgit