[Libreoffice-commits] core.git: connectivity/source

Caolán McNamara caolanm at redhat.com
Mon Oct 13 13:00:16 PDT 2014


 connectivity/source/drivers/firebird/Blob.cxx |    7 ++-
 connectivity/source/drivers/firebird/Util.cxx |   56 ++++++++++++++------------
 connectivity/source/drivers/firebird/Util.hxx |   14 +++++-
 3 files changed, 47 insertions(+), 30 deletions(-)

New commits:
commit 15decb9b323029e764a89a78793862c8af74cbac
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Oct 13 09:59:00 2014 +0100

    coverity#1158396 Uncaught exception
    
    Change-Id: I0306b8431641d841027b30dfe1c03ecad5df6867

diff --git a/connectivity/source/drivers/firebird/Blob.cxx b/connectivity/source/drivers/firebird/Blob.cxx
index 7d62bbc..44cd33e 100644
--- a/connectivity/source/drivers/firebird/Blob.cxx
+++ b/connectivity/source/drivers/firebird/Blob.cxx
@@ -212,8 +212,11 @@ sal_Int32 SAL_CALL Blob::readBytes(uno::Sequence< sal_Int8 >& rDataOut,
                                &nBytesRead,
                                nReadSize,
                                (char*) rDataOut.getArray() + nTotalBytesRead);
-        if (aErr)
-            evaluateStatusVector(m_statusVector, "isc_get_segment", *this);
+        if (aErr && IndicatesError(m_statusVector))
+        {
+            OUString sError(StatusVectorToString(m_statusVector, "isc_get_segment"));
+            throw IOException(sError, *this);
+        }
         nTotalBytesRead += nBytesRead;
         m_nBlobPosition += nBytesRead;
     }
diff --git a/connectivity/source/drivers/firebird/Util.cxx b/connectivity/source/drivers/firebird/Util.cxx
index 448fa3a..0806d0e 100644
--- a/connectivity/source/drivers/firebird/Util.cxx
+++ b/connectivity/source/drivers/firebird/Util.cxx
@@ -26,37 +26,43 @@ OUString firebird::sanitizeIdentifier(const OUString& rIdentifier)
     return sRet;
 }
 
-void firebird::evaluateStatusVector(ISC_STATUS_ARRAY& aStatusVector,
-                                    const OUString& aCause,
-                                    const uno::Reference< XInterface >& _rxContext)
-    throw(SQLException)
+OUString firebird::StatusVectorToString(const ISC_STATUS_ARRAY& rStatusVector,
+                                    const OUString& rCause)
 {
-    if (aStatusVector[0]==1 && aStatusVector[1]) // indicates error
-    {
-        OUStringBuffer buf;
-        char msg[512]; // Size is based on suggestion in docs.
-        const ISC_STATUS* pStatus = (const ISC_STATUS*) &aStatusVector;
+    OUStringBuffer buf;
+    char msg[512]; // Size is based on suggestion in docs.
+    const ISC_STATUS* pStatus = (const ISC_STATUS*) &rStatusVector;
 
-        buf.appendAscii("firebird_sdbc error:");
-        try
-        {
-            while(fb_interpret(msg, sizeof(msg), &pStatus))
-            {
-                // TODO: verify encoding
-                buf.appendAscii("\n*");
-                buf.append(OUString(msg, strlen(msg), RTL_TEXTENCODING_UTF8));
-            }
-        }
-        catch (...)
+    buf.appendAscii("firebird_sdbc error:");
+    try
+    {
+        while(fb_interpret(msg, sizeof(msg), &pStatus))
         {
-            SAL_WARN("connectivity.firebird", "ignore fb_interpret exception");
+            // TODO: verify encoding
+            buf.appendAscii("\n*");
+            buf.append(OUString(msg, strlen(msg), RTL_TEXTENCODING_UTF8));
         }
-        buf.appendAscii("\ncaused by\n'").append(aCause).appendAscii("'\n");
+    }
+    catch (...)
+    {
+        SAL_WARN("connectivity.firebird", "ignore fb_interpret exception");
+    }
+    buf.appendAscii("\ncaused by\n'").append(rCause).appendAscii("'\n");
 
-        OUString error = buf.makeStringAndClear();
-        SAL_WARN("connectivity.firebird", error);
+    OUString error = buf.makeStringAndClear();
+    SAL_WARN("connectivity.firebird", error);
+    return error;
+}
 
-        throw SQLException( error, _rxContext, OUString(), 1, Any() );
+void firebird::evaluateStatusVector(const ISC_STATUS_ARRAY& rStatusVector,
+                                    const OUString& rCause,
+                                    const uno::Reference< XInterface >& _rxContext)
+    throw(SQLException)
+{
+    if (IndicatesError(rStatusVector))
+    {
+        OUString error = StatusVectorToString(rStatusVector, rCause);
+        throw SQLException(error, _rxContext, OUString(), 1, Any());
     }
 }
 
diff --git a/connectivity/source/drivers/firebird/Util.hxx b/connectivity/source/drivers/firebird/Util.hxx
index e6a978a..c04488f 100644
--- a/connectivity/source/drivers/firebird/Util.hxx
+++ b/connectivity/source/drivers/firebird/Util.hxx
@@ -31,13 +31,21 @@ namespace connectivity
          * for such shorter strings, however any trailing padding makes the gui
          * editing of such names harder, hence we remove all trailing whitespace.
          */
-        ::rtl::OUString sanitizeIdentifier(const ::rtl::OUString& rIdentifier);
+        OUString sanitizeIdentifier(const OUString& rIdentifier);
+
+        inline bool IndicatesError(const ISC_STATUS_ARRAY& rStatusVector)
+        {
+            return rStatusVector[0]==1 && rStatusVector[1]; // indicates error;
+        }
+
+        OUString StatusVectorToString(const ISC_STATUS_ARRAY& rStatusVector,
+                                    const OUString& rCause);
 
         /**
          * Evaluate a firebird status vector and throw exceptions as necessary.
          * The content of the status vector is included in the thrown exception.
          */
-        void evaluateStatusVector(ISC_STATUS_ARRAY& aStatusVector,
+        void evaluateStatusVector(const ISC_STATUS_ARRAY& rStatusVector,
                                   const ::rtl::OUString& aCause,
                                   const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext)
                 throw (::com::sun::star::sdbc::SQLException);
@@ -60,4 +68,4 @@ namespace connectivity
 }
 #endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_UTIL_HXX
 
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list