Kaydet (Commit) 8b7f96d2 authored tarafından Michael Stahl's avatar Michael Stahl

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
üst b862f6e9
......@@ -169,7 +169,6 @@ interface XDocumentRepository : XRepository
com::sun::star::beans::Pair< sequence<Statement>, boolean >
getStatementRDFa([in] XMetadatable Element)
raises( com::sun::star::lang::IllegalArgumentException,
com::sun::star::container::NoSuchElementException,
RepositoryException );
/** gets matching RDFa statements from the repository.
......
......@@ -359,7 +359,6 @@ public:
virtual beans::Pair< uno::Sequence<rdf::Statement>, 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<rdf::Statement>, 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<container::XEnumeration> 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<container::XEnumeration> 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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment