diff options
author | Lionel Elie Mamane <lionel@mamane.lu> | 2013-04-15 01:27:39 +0200 |
---|---|---|
committer | Fridrich Strba <fridrich@documentfoundation.org> | 2013-04-15 07:10:04 +0000 |
commit | b475a63edea91daccfc179506b53a5f2ae7fc12b (patch) | |
tree | f2ca3bd6dd8d95df90d53167ddf16f6bcbe378ae | |
parent | 7fcfe8817c0cc896cb29de2613d9f43381d7b6ad (diff) |
fdo#61142 mixup between size and length
Change-Id: Ia2903d5139378e97bb2e8d00ccb2c213d3e1dee6
Reviewed-on: https://gerrit.libreoffice.org/3385
Reviewed-by: Fridrich Strba <fridrich@documentfoundation.org>
Tested-by: Fridrich Strba <fridrich@documentfoundation.org>
-rw-r--r-- | connectivity/source/drivers/odbcbase/OTools.cxx | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/connectivity/source/drivers/odbcbase/OTools.cxx b/connectivity/source/drivers/odbcbase/OTools.cxx index d568b7f911fe..7165c4d1759a 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; |