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

New commits:
commit b475a63edea91daccfc179506b53a5f2ae7fc12b
Author: Lionel Elie Mamane <lio...@mamane.lu>
Date:   Mon Apr 15 01:27:39 2013 +0200

    fdo#61142 mixup between size and length
    
    Change-Id: Ia2903d5139378e97bb2e8d00ccb2c213d3e1dee6
    Reviewed-on: https://gerrit.libreoffice.org/3385
    Reviewed-by: Fridrich Strba <fridr...@documentfoundation.org>
    Tested-by: Fridrich Strba <fridr...@documentfoundation.org>

diff --git a/connectivity/source/drivers/odbcbase/OTools.cxx 
b/connectivity/source/drivers/odbcbase/OTools.cxx
index d568b7f..7165c4d 100644
--- a/connectivity/source/drivers/odbcbase/OTools.cxx
+++ b/connectivity/source/drivers/odbcbase/OTools.cxx
@@ -424,11 +424,15 @@ Sequence<sal_Int8> OTools::getBytesValue(const 
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 @@ Sequence<sal_Int8> OTools::getBytesValue(const 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;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to