connectivity/source/drivers/odbcbase/OTools.cxx | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-)
New commits: commit 51c8bb3242ad1e8e1a5906c4af2ba94c0252b36e Author: Lionel Elie Mamane <[email protected]> Date: Tue Dec 25 13:04:44 2012 +0100 fdo#58693 ODBC SQLGetData returns byte length, not data size Change-Id: Icd2f6503d9452c36f858180e4193af993ae7e288 diff --git a/connectivity/source/drivers/odbcbase/OTools.cxx b/connectivity/source/drivers/odbcbase/OTools.cxx index 831eb3a..d568b7f 100644 --- a/connectivity/source/drivers/odbcbase/OTools.cxx +++ b/connectivity/source/drivers/odbcbase/OTools.cxx @@ -444,6 +444,8 @@ Sequence<sal_Int8> OTools::getBytesValue(const OConnection* _pConnection, return ::rtl::OUString(); 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) ) { // we filled the buffer; remove the terminating null character @@ -456,7 +458,7 @@ Sequence<sal_Int8> OTools::getBytesValue(const OConnection* _pConnection, } else { - nReadChars = pcbValue; + nReadChars = pcbValue/sizeof(sal_Unicode); } aData.append(waCharArray, nReadChars); commit 3016e7d84433a1b3bfce91a7a78ffef3c3d71bd9 Author: Lionel Elie Mamane <[email protected]> Date: Tue Dec 25 12:55:59 2012 +0100 ODBC: binary data is not null-terminated Change-Id: Ibc90fabf7534b537948c12de76b611daf5ca9808 diff --git a/connectivity/source/drivers/odbcbase/OTools.cxx b/connectivity/source/drivers/odbcbase/OTools.cxx index 290aa61..831eb3a 100644 --- a/connectivity/source/drivers/odbcbase/OTools.cxx +++ b/connectivity/source/drivers/odbcbase/OTools.cxx @@ -365,9 +365,11 @@ Sequence<sal_Int8> OTools::getBytesValue(const OConnection* _pConnection, SQLLEN pcbValue = SQL_NO_TOTAL; Sequence<sal_Int8> aData; - // >= because if the data is nMaxLen long, our buffer is actually ONE byte short, - // for the null byte terminator! - while (pcbValue == SQL_NO_TOTAL || pcbValue >= nMaxLen) + OSL_ENSURE( _fSqlType != SQL_CHAR && _fSqlType != SQL_VARCHAR && _fSqlType != SQL_LONGVARCHAR && + _fSqlType != SQL_WCHAR && _fSqlType != SQL_WVARCHAR && _fSqlType != SQL_WLONGVARCHAR, + "connectivity::odbc::OTools::getBytesValue called with character _fSqlType"); + + while (pcbValue == SQL_NO_TOTAL || pcbValue > nMaxLen) { OTools::ThrowException(_pConnection, (*(T3SQLGetData)_pConnection->getOdbcFunction(ODBC3SQLGetData))( @@ -388,13 +390,8 @@ Sequence<sal_Int8> OTools::getBytesValue(const OConnection* _pConnection, // pcbValue will not be SQL_NO_TOTAL -> we have a reliable count if ( (pcbValue == SQL_NO_TOTAL) || (pcbValue >= nMaxLen) ) { - // we filled the buffer; remove the terminating null byte - nReadBytes = nMaxLen-1; - if ( aCharArray[nReadBytes] != 0) - { - OSL_FAIL("Buggy ODBC driver? Did not null-terminate (variable length) data!"); - ++nReadBytes; - } + // we filled the buffer + nReadBytes = nMaxLen; } else { _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
