summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Nabet <serval2412@yahoo.fr>2018-05-26 18:01:15 +0200
committerJulien Nabet <serval2412@yahoo.fr>2018-05-28 20:29:29 +0200
commit54ddc4ff4c2ff7e8b2c502d6b475cfdc9b8e3cec (patch)
treeb75d32a31b445a5125862bd9d1cfb72f68126582
parent44391aec4a12c0b36208ca30cc0c66e151678c24 (diff)
tdf#117446: FB mig, (VAR)BINARY, fix memory management
By default, 8000 bytes are allocated for VARBINARY The pb is we can need more. See https://bugs.documentfoundation.org/show_bug.cgi?id=117446#c6 Change-Id: I0ef5811dc01a587491bd9345129d1a41a4d9f095 Reviewed-on: https://gerrit.libreoffice.org/54863 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
-rw-r--r--connectivity/source/drivers/firebird/PreparedStatement.cxx9
1 files changed, 8 insertions, 1 deletions
diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx
index 0a43d5c93851..fee4029088f4 100644
--- a/connectivity/source/drivers/firebird/PreparedStatement.cxx
+++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx
@@ -837,12 +837,19 @@ void SAL_CALL OPreparedStatement::setBytes(sal_Int32 nParameterIndex,
setParameterNull(nParameterIndex, false);
const sal_Int32 nMaxSize = 0xFFFF;
Sequence<sal_Int8> xBytesCopy(xBytes);
- // First 2 bytes indicate string size
if (xBytesCopy.getLength() > nMaxSize)
{
xBytesCopy.realloc( nMaxSize );
}
const short nSize = xBytesCopy.getLength();
+ // 8000 corresponds to value from lcl_addDefaultParameters
+ // in dbaccess/source/filter/hsqldb/createparser.cxx
+ if (nSize > 8000)
+ {
+ free(pVar->sqldata);
+ pVar->sqldata = static_cast<char *>(malloc(sizeof(char) * nSize + 2));
+ }
+ // First 2 bytes indicate string size
memcpy(pVar->sqldata, &nSize, 2);
// Actual data
memcpy(pVar->sqldata + 2, xBytesCopy.getConstArray(), nSize);