summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2019-12-15 09:23:14 +0100
committerStephan Bergmann <sbergman@redhat.com>2020-04-29 21:31:27 +0200
commite287fde52fb9de5bdf1d00c8a3fbfcca7db9892c (patch)
treeb8a6291d32879bc21a04d224a29792f6ea883e80 /include
parent528afad04f0ff9fda31a280f044bf91e864fae72 (diff)
Silence bogus -Wstringop-overflow with GCC trunk towards GCC 10
...see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92893> "Unhelpful -Wstringop-overflow warning" Change-Id: I14b2e5e19b57df6f57a9252f27ee4b3feb8ba18c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/85161 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'include')
-rw-r--r--include/rtl/strbuf.hxx8
-rw-r--r--include/rtl/string.hxx16
-rw-r--r--include/rtl/ustring.hxx16
3 files changed, 40 insertions, 0 deletions
diff --git a/include/rtl/strbuf.hxx b/include/rtl/strbuf.hxx
index 2a303ce998e6..e9a548297016 100644
--- a/include/rtl/strbuf.hxx
+++ b/include/rtl/strbuf.hxx
@@ -569,7 +569,15 @@ public:
return *this;
l += pData->length;
rtl_stringbuffer_ensureCapacity( &pData, &nCapacity, l );
+#if defined __GNUC__ && __GNUC__ == 10 && !defined __clang__
+ // Avoid some bogus GCC 10 trunk -Werror=stringop-overflow (see
+ // <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92893> "Unhelpful -Wstringop-overflow
+ // warning"):
+ struct Hack { char c; char a[]; };
+ char* end = c.addData( &reinterpret_cast<Hack *>(pData->buffer)->c + pData->length );
+#else
char* end = c.addData( pData->buffer + pData->length );
+#endif
*end = '\0';
pData->length = l;
return *this;
diff --git a/include/rtl/string.hxx b/include/rtl/string.hxx
index 809b0a11bcd5..4f600affdabe 100644
--- a/include/rtl/string.hxx
+++ b/include/rtl/string.hxx
@@ -273,7 +273,15 @@ public:
pData = rtl_string_alloc( l );
if (l != 0)
{
+#if defined __GNUC__ && __GNUC__ == 10 && !defined __clang__
+ // Avoid some bogus GCC 10 trunk -Werror=stringop-overflow (see
+ // <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92893> "Unhelpful -Wstringop-overflow
+ // warning"):
+ struct Hack { char c; char a[]; };
+ char* end = c.addData( &reinterpret_cast<Hack *>(pData->buffer)->c );
+#else
char* end = c.addData( pData->buffer );
+#endif
pData->length = l;
*end = '\0';
}
@@ -381,7 +389,15 @@ public:
return *this;
l += pData->length;
rtl_string_ensureCapacity( &pData, l );
+#if defined __GNUC__ && __GNUC__ == 10 && !defined __clang__
+ // Avoid some bogus GCC 10 trunk -Werror=stringop-overflow (see
+ // <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92893> "Unhelpful -Wstringop-overflow
+ // warning"):
+ struct Hack { char c; char a[]; };
+ char* end = c.addData( &reinterpret_cast<Hack *>(pData->buffer)->c + pData->length );
+#else
char* end = c.addData( pData->buffer + pData->length );
+#endif
*end = '\0';
pData->length = l;
return *this;
diff --git a/include/rtl/ustring.hxx b/include/rtl/ustring.hxx
index 5f0c1032c603..ffe42d139215 100644
--- a/include/rtl/ustring.hxx
+++ b/include/rtl/ustring.hxx
@@ -401,7 +401,15 @@ public:
pData = rtl_uString_alloc( l );
if (l != 0)
{
+#if defined __GNUC__ && __GNUC__ == 10 && !defined __clang__
+ // Avoid some bogus GCC 10 trunk -Werror=stringop-overflow (see
+ // <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92893> "Unhelpful -Wstringop-overflow
+ // warning"):
+ struct Hack { sal_Unicode c; sal_Unicode a[]; };
+ sal_Unicode* end = c.addData( reinterpret_cast<Hack *>(pData->buffer - 1)->a );
+#else
sal_Unicode* end = c.addData( pData->buffer );
+#endif
pData->length = l;
*end = '\0';
// TODO realloc in case pData->length is noticeably smaller than l?
@@ -630,7 +638,15 @@ public:
return *this;
l += pData->length;
rtl_uString_ensureCapacity( &pData, l );
+#if defined __GNUC__ && __GNUC__ == 10 && !defined __clang__
+ // Avoid some bogus GCC 10 trunk -Werror=stringop-overflow (see
+ // <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92893> "Unhelpful -Wstringop-overflow
+ // warning"):
+ struct Hack { sal_Unicode c; sal_Unicode a[]; };
+ sal_Unicode* end = c.addData( reinterpret_cast<Hack *>(pData->buffer - 1)->a + pData->length );
+#else
sal_Unicode* end = c.addData( pData->buffer + pData->length );
+#endif
*end = '\0';
pData->length = l;
return *this;