connectivity/source/drivers/dbase/DTable.cxx | 13 ++++++------ connectivity/source/drivers/jdbc/ConnectionLog.cxx | 9 ++++---- extensions/source/logging/plaintextformatter.cxx | 9 ++++---- forms/source/xforms/submission/serialization_urlencoded.cxx | 8 +++---- sd/source/filter/eppt/pptx-epptooxml.cxx | 5 ++-- svl/source/misc/lockfilecommon.cxx | 5 ++-- 6 files changed, 27 insertions(+), 22 deletions(-)
New commits: commit 113536e974d7ebbbc484b0ef40406f9b4d14e511 Author: Stephan Bergmann <sberg...@redhat.com> AuthorDate: Fri Jan 18 15:54:12 2019 +0100 Commit: Stephan Bergmann <sberg...@redhat.com> CommitDate: Mon Jan 21 09:37:44 2019 +0100 Avoid -Werror=format-{overflow,truncation}= ...as emitted by at least GCC 8.2 with --enable-optimized, by making the buffers large enough for the (hypothetical) largest values of the various date/time components Change-Id: I82e9b08fa099546b2d6f29c702e1440df9e6c6e0 Reviewed-on: https://gerrit.libreoffice.org/66618 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sberg...@redhat.com> diff --git a/connectivity/source/drivers/dbase/DTable.cxx b/connectivity/source/drivers/dbase/DTable.cxx index d5e1a1b46c41..9a72c276ed4c 100644 --- a/connectivity/source/drivers/dbase/DTable.cxx +++ b/connectivity/source/drivers/dbase/DTable.cxx @@ -1822,16 +1822,17 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo aDate = ::dbtools::DBTypeConversion::toDate(thisColVal.getDouble()); else aDate = thisColVal; - char s[9]; + char s[sizeof("-327686553565535")]; + // reserve enough space for hypothetical max length snprintf(s, sizeof(s), "%04d%02d%02d", - static_cast<int>(aDate.Year), - static_cast<int>(aDate.Month), - static_cast<int>(aDate.Day)); + static_cast<sal_Int32>(aDate.Year), + static_cast<sal_uInt32>(aDate.Month), + static_cast<sal_uInt32>(aDate.Day)); - // Exactly 8 bytes to copy: - strncpy(pData,s,sizeof s - 1); + // Exactly 8 bytes to copy (even if s could hypothetically be longer): + memcpy(pData,s,8); } break; case DataType::INTEGER: { diff --git a/connectivity/source/drivers/jdbc/ConnectionLog.cxx b/connectivity/source/drivers/jdbc/ConnectionLog.cxx index 329a0c185970..4f564c3fba6e 100644 --- a/connectivity/source/drivers/jdbc/ConnectionLog.cxx +++ b/connectivity/source/drivers/jdbc/ConnectionLog.cxx @@ -98,11 +98,12 @@ namespace comphelper { namespace log { namespace convert OUString convertLogArgToString( const DateTime& _rDateTime ) { - char buffer[ 30 ]; + char buffer[ sizeof("-32768-65535-65535 65535:65535:65535.4294967295") ]; + // reserve enough space for hypothetical max length const size_t buffer_size = sizeof( buffer ); - snprintf( buffer, buffer_size, "%04i-%02i-%02i %02i:%02i:%02i.%09i", - static_cast<int>(_rDateTime.Year), static_cast<int>(_rDateTime.Month), static_cast<int>(_rDateTime.Day), - static_cast<int>(_rDateTime.Hours), static_cast<int>(_rDateTime.Minutes), static_cast<int>(_rDateTime.Seconds), static_cast<int>(_rDateTime.NanoSeconds) ); + snprintf( buffer, buffer_size, "%04" SAL_PRIdINT32 "-%02" SAL_PRIuUINT32 "-%02" SAL_PRIuUINT32 " %02" SAL_PRIuUINT32 ":%02" SAL_PRIuUINT32 ":%02" SAL_PRIuUINT32 ".%09" SAL_PRIuUINT32, + static_cast<sal_Int32>(_rDateTime.Year), static_cast<sal_uInt32>(_rDateTime.Month), static_cast<sal_uInt32>(_rDateTime.Day), + static_cast<sal_uInt32>(_rDateTime.Hours), static_cast<sal_uInt32>(_rDateTime.Minutes), static_cast<sal_uInt32>(_rDateTime.Seconds), _rDateTime.NanoSeconds ); return OUString::createFromAscii( buffer ); } diff --git a/extensions/source/logging/plaintextformatter.cxx b/extensions/source/logging/plaintextformatter.cxx index 6691ee17b060..2f5096ea510b 100644 --- a/extensions/source/logging/plaintextformatter.cxx +++ b/extensions/source/logging/plaintextformatter.cxx @@ -79,7 +79,8 @@ namespace logging OUString SAL_CALL PlainTextFormatter::format( const LogRecord& _rRecord ) { - char buffer[ 30 ]; + char buffer[ sizeof("-32768-65535-65535 65535:65535:65535.4294967295") ]; + // reserve enough space for hypothetical max length const int buffer_size = sizeof( buffer ); int used = snprintf( buffer, buffer_size, "%10i", static_cast<int>(_rRecord.SequenceNumber) ); if ( used >= buffer_size || used < 0 ) @@ -94,9 +95,9 @@ namespace logging aLogEntry.appendAscii( buffer ); aLogEntry.append( " " ); - snprintf( buffer, buffer_size, "%04i-%02i-%02i %02i:%02i:%02i.%09i", - static_cast<int>(_rRecord.LogTime.Year), static_cast<int>(_rRecord.LogTime.Month), static_cast<int>(_rRecord.LogTime.Day), - static_cast<int>(_rRecord.LogTime.Hours), static_cast<int>(_rRecord.LogTime.Minutes), static_cast<int>(_rRecord.LogTime.Seconds), static_cast<int>(_rRecord.LogTime.NanoSeconds) ); + snprintf( buffer, buffer_size, "%04" SAL_PRIdINT32 "-%02" SAL_PRIuUINT32 "-%02" SAL_PRIuUINT32 " %02" SAL_PRIuUINT32 ":%02" SAL_PRIuUINT32 ":%02" SAL_PRIuUINT32 ".%09" SAL_PRIuUINT32, + static_cast<sal_Int32>(_rRecord.LogTime.Year), static_cast<sal_uInt32>(_rRecord.LogTime.Month), static_cast<sal_uInt32>(_rRecord.LogTime.Day), + static_cast<sal_uInt32>(_rRecord.LogTime.Hours), static_cast<sal_uInt32>(_rRecord.LogTime.Minutes), static_cast<sal_uInt32>(_rRecord.LogTime.Seconds), _rRecord.LogTime.NanoSeconds ); aLogEntry.appendAscii( buffer ); aLogEntry.append( " " ); diff --git a/sd/source/filter/eppt/pptx-epptooxml.cxx b/sd/source/filter/eppt/pptx-epptooxml.cxx index d2a5231c7d2e..ee6fb0b81569 100644 --- a/sd/source/filter/eppt/pptx-epptooxml.cxx +++ b/sd/source/filter/eppt/pptx-epptooxml.cxx @@ -1001,9 +1001,10 @@ bool PowerPointExport::WriteComments(sal_uInt32 nPageNum) Reference< XText > xText(xAnnotation->getTextRange()); sal_Int32 nLastIndex; sal_Int32 nId = GetAuthorIdAndLastIndex(xAnnotation->getAuthor(), nLastIndex); - char cDateTime[32]; + char cDateTime[sizeof("-32768-65535-65535T65535:65535:65535.4294967295")]; + // reserve enough space for hypothetical max length - snprintf(cDateTime, 31, "%02d-%02d-%02dT%02d:%02d:%02d.%09" SAL_PRIuUINT32, aDateTime.Year, aDateTime.Month, aDateTime.Day, aDateTime.Hours, aDateTime.Minutes, aDateTime.Seconds, aDateTime.NanoSeconds); + snprintf(cDateTime, sizeof cDateTime, "%02" SAL_PRIdINT32 "-%02" SAL_PRIuUINT32 "-%02" SAL_PRIuUINT32 "T%02" SAL_PRIuUINT32 ":%02" SAL_PRIuUINT32 ":%02" SAL_PRIuUINT32 ".%09" SAL_PRIuUINT32, sal_Int32(aDateTime.Year), sal_uInt32(aDateTime.Month), sal_uInt32(aDateTime.Day), sal_uInt32(aDateTime.Hours), sal_uInt32(aDateTime.Minutes), sal_uInt32(aDateTime.Seconds), aDateTime.NanoSeconds); pFS->startElementNS(XML_p, XML_cm, XML_authorId, I32S(nId), diff --git a/svl/source/misc/lockfilecommon.cxx b/svl/source/misc/lockfilecommon.cxx index 88850e7687f9..483b52982de5 100644 --- a/svl/source/misc/lockfilecommon.cxx +++ b/svl/source/misc/lockfilecommon.cxx @@ -200,8 +200,9 @@ OUString LockFileCommon::GetCurrentLocalTime() oslDateTime aDateTime; if ( osl_getDateTimeFromTimeValue( &aLocTime, &aDateTime ) ) { - char pDateTime[20]; - sprintf( pDateTime, "%02d.%02d.%4d %02d:%02d", aDateTime.Day, aDateTime.Month, aDateTime.Year, aDateTime.Hours, aDateTime.Minutes ); + char pDateTime[sizeof("65535.65535.-32768 65535:65535")]; + // reserve enough space for hypothetical max length + sprintf( pDateTime, "%02" SAL_PRIuUINT32 ".%02" SAL_PRIuUINT32 ".%4" SAL_PRIdINT32 " %02" SAL_PRIuUINT32 ":%02" SAL_PRIuUINT32, sal_uInt32(aDateTime.Day), sal_uInt32(aDateTime.Month), sal_Int32(aDateTime.Year), sal_uInt32(aDateTime.Hours), sal_uInt32(aDateTime.Minutes) ); aTime = OUString::createFromAscii( pDateTime ); } } commit 5e1e912010f35ee9ba5f387bdee82363d32a8105 Author: Stephan Bergmann <sberg...@redhat.com> AuthorDate: Fri Jan 18 15:42:26 2019 +0100 Commit: Stephan Bergmann <sberg...@redhat.com> CommitDate: Mon Jan 21 09:37:33 2019 +0100 Avoid -Werror=format-truncation= ...as emitted by at least GCC 8.2 with --enable-optimized, about trying to output up to 4 bytes into a destionation of size 3 Change-Id: I42c3c9bb7a0355a7d4a1574c6c65d6f74a97f1dc Reviewed-on: https://gerrit.libreoffice.org/66617 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sberg...@redhat.com> diff --git a/forms/source/xforms/submission/serialization_urlencoded.cxx b/forms/source/xforms/submission/serialization_urlencoded.cxx index 626569aec2aa..43dafdc714c6 100644 --- a/forms/source/xforms/submission/serialization_urlencoded.cxx +++ b/forms/source/xforms/submission/serialization_urlencoded.cxx @@ -73,7 +73,7 @@ void CSerializationURLEncoded::encode_and_append(const OUString& aString, OStri { OString utf8String = OUStringToOString(aString, RTL_TEXTENCODING_UTF8); const sal_uInt8 *pString = reinterpret_cast< const sal_uInt8 * >( utf8String.getStr() ); - sal_Char tmpChar[4]; tmpChar[3] = 0; + sal_Char tmpChar[4]; while( *pString != 0) { @@ -89,16 +89,16 @@ void CSerializationURLEncoded::encode_and_append(const OUString& aString, OStri } else if (*pString == 0x0a) { aBuffer.append("%0D%0A"); } else { - snprintf(tmpChar, 3, "%%%X", *pString % 0x100); + snprintf(tmpChar, 4, "%%%X", *pString % 0x100); aBuffer.append(tmpChar); } } else { - snprintf(tmpChar, 3, "%%%X", *pString % 0x100); + snprintf(tmpChar, 4, "%%%X", *pString % 0x100); aBuffer.append(tmpChar); while (*pString >= 0x80) { // continuation... pString++; - snprintf(tmpChar, 3, "%%%X", *pString % 0x100); + snprintf(tmpChar, 4, "%%%X", *pString % 0x100); aBuffer.append(tmpChar); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits