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

Lionel Elie Mamane lionel at mamane.lu
Sun Apr 14 16:29:50 PDT 2013


 connectivity/source/drivers/odbcbase/OTools.cxx |   12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

New commits:
commit a63c9bac6a6223ac716b7bcb590dac4eb01d5def
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Mon Apr 15 01:27:39 2013 +0200

    fdo#61142 mixup between size and length
    
    Change-Id: Ia2903d5139378e97bb2e8d00ccb2c213d3e1dee6

diff --git a/connectivity/source/drivers/odbcbase/OTools.cxx b/connectivity/source/drivers/odbcbase/OTools.cxx
index 3e3f393..4f85184 100644
--- a/connectivity/source/drivers/odbcbase/OTools.cxx
+++ b/connectivity/source/drivers/odbcbase/OTools.cxx
@@ -424,11 +424,15 @@ OUString OTools::getStringValue(OConnection* _pConnection,
         // we assume everyone (LibO & ODBC) uses UTF-16; see OPreparedStatement::setParameter
         BOOST_STATIC_ASSERT(sizeof(sal_Unicode) == 2);
         BOOST_STATIC_ASSERT(sizeof(SQLWCHAR)    == 2);
+        BOOST_STATIC_ASSERT(sizeof(waCharArray) % 2 == 0);
+        // Size == number of bytes, Len == number of UTF-16 code units
+        const SQLLEN nMaxSize = sizeof(waCharArray);
+        const SQLLEN nMaxLen  = sizeof(waCharArray) / sizeof(sal_Unicode);
+        BOOST_STATIC_ASSERT(nMaxLen * sizeof(sal_Unicode) == nMaxSize);
+
         // read the unicode data
-        const SQLLEN nMaxLen = sizeof(waCharArray) / sizeof(sal_Unicode);
         SQLLEN pcbValue = SQL_NO_TOTAL;
-
-        while ((pcbValue == SQL_NO_TOTAL ) || (pcbValue >= nMaxLen) )
+        while ((pcbValue == SQL_NO_TOTAL ) || (pcbValue >= nMaxSize) )
         {
             OTools::ThrowException(_pConnection,
                                    (*(T3SQLGetData)_pConnection->getOdbcFunction(ODBC3SQLGetData))(
@@ -446,7 +450,7 @@ OUString OTools::getStringValue(OConnection* _pConnection,
             SQLLEN nReadChars;
             OSL_ENSURE( (pcbValue < 0) || (pcbValue % 2 == 0),
                         "ODBC: SQLGetData of SQL_C_WCHAR returned odd number of bytes");
-            if ( (pcbValue == SQL_NO_TOTAL) || (pcbValue >= nMaxLen) )
+            if ( (pcbValue == SQL_NO_TOTAL) || (pcbValue >= nMaxSize) )
             {
                 // we filled the buffer; remove the terminating null character
                 nReadChars = nMaxLen-1;


More information about the Libreoffice-commits mailing list