diff options
author | Lionel Elie Mamane <lionel@mamane.lu> | 2012-12-25 12:55:59 +0100 |
---|---|---|
committer | Lionel Elie Mamane <lionel@mamane.lu> | 2012-12-25 13:06:00 +0100 |
commit | 5c0ca47ea05ac169c3aa6af5e95321b5de3e439d (patch) | |
tree | 0fbead13cdefb77cf4627890afc797e1e56909db /connectivity | |
parent | 12bad6a4e958d01bd5b6195e612543829aebe978 (diff) |
ODBC: binary data is not null-terminated
Change-Id: Ibc90fabf7534b537948c12de76b611daf5ca9808
Diffstat (limited to 'connectivity')
-rw-r--r-- | connectivity/source/drivers/odbcbase/OTools.cxx | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/connectivity/source/drivers/odbcbase/OTools.cxx b/connectivity/source/drivers/odbcbase/OTools.cxx index fbeeec65fd37..d568b7f911fe 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 { |