From 8b7f96d257724656ac4a4303b17285be2ed13886 Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Mon, 13 Oct 2014 18:18:50 +0200 Subject: coverity#707458 Uncaught exception (better fix) getStatementsGraph_NoLock() cannot throw the exception because of the i_Internal=true parameter, which may confuse Converity; but possibly xIter->nextElement() could throw this in a multi-threaded scenario... Change-Id: I204c0e5b38fee919d6cfe9247bde76b6ea78ed0f --- unoxml/source/rdf/librdf_repository.cxx | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'unoxml') diff --git a/unoxml/source/rdf/librdf_repository.cxx b/unoxml/source/rdf/librdf_repository.cxx index dd0dec63a277..2ce52b71856a 100644 --- a/unoxml/source/rdf/librdf_repository.cxx +++ b/unoxml/source/rdf/librdf_repository.cxx @@ -359,7 +359,6 @@ public: virtual beans::Pair< uno::Sequence, sal_Bool > SAL_CALL getStatementRDFa(uno::Reference< rdf::XMetadatable > const& i_xElement) throw (uno::RuntimeException, lang::IllegalArgumentException, - container::NoSuchElementException, rdf::RepositoryException, std::exception) SAL_OVERRIDE; virtual uno::Reference< container::XEnumeration > SAL_CALL getStatementsRDFa( @@ -1647,7 +1646,6 @@ beans::Pair< uno::Sequence, sal_Bool > SAL_CALL librdf_Repository::getStatementRDFa( const uno::Reference< rdf::XMetadatable > & i_xElement) throw (uno::RuntimeException, lang::IllegalArgumentException, - container::NoSuchElementException, rdf::RepositoryException, std::exception) { if (!i_xElement.is()) { @@ -1671,18 +1669,27 @@ throw (uno::RuntimeException, lang::IllegalArgumentException, } ::comphelper::SequenceAsVector< rdf::Statement > ret; - const uno::Reference xIter( - getStatementsGraph_NoLock(0, 0, 0, xXmlId, true) ); - OSL_ENSURE(xIter.is(), "getStatementRDFa: no result?"); - if (!xIter.is()) throw uno::RuntimeException(); - while (xIter->hasMoreElements()) { - rdf::Statement stmt; - if (!(xIter->nextElement() >>= stmt)) { - OSL_FAIL("getStatementRDFa: result of wrong type?"); - } else { - ret.push_back(stmt); + try + { + const uno::Reference xIter( + getStatementsGraph_NoLock(0, 0, 0, xXmlId, true) ); + OSL_ENSURE(xIter.is(), "getStatementRDFa: no result?"); + if (!xIter.is()) throw uno::RuntimeException(); + while (xIter->hasMoreElements()) { + rdf::Statement stmt; + if (!(xIter->nextElement() >>= stmt)) { + OSL_FAIL("getStatementRDFa: result of wrong type?"); + } else { + ret.push_back(stmt); + } } } + catch (const container::NoSuchElementException& e) + { + throw lang::WrappedTargetRuntimeException( + "librdf_Repository::getStatementRDFa: " + "cannot getStatementsGraph", *this, uno::makeAny(e)); + } ::osl::MutexGuard g(m_aMutex); // don't call i_x* with mutex locked -- cgit