From de005e7976e4b110d6b5f32a8bab5141713acb7b Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 10 Jun 2022 16:57:52 +0200 Subject: [PATCH] QByteArray: more GCC 12 -Werror=array-bound whack-a-mole MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This one came up on a tsan build, but not on an asan/ubsan one!?!: qbytearray.cpp: In member function ‘QByteArray QByteArray::toBase64(Base64Options) const’: qbytearray.cpp:3884:42: error: array subscript 1 is outside array bounds of ‘const char [1]’ [-Werror=array-bounds] 3884 | chunk |= int(uchar(data()[i++])) << 8; | ~~~~~~~~~~^ qbytearray.cpp:37:24: note: at offset 1 into object ‘QByteArray::_empty’ of size 1 37 | Q_CONSTINIT const char QByteArray::_empty = '\0'; | ^~~~~~~~~~ cc1plus: all warnings being treated as errors Fix, as so often, by caching the size(). The code in 5.15 is different, but similar, so picking all the way. Pick-to: 6.4 6.3 6.2 5.15 Task-number: QTBUG-103923 Change-Id: Iac30e964c8d7d367620d16db65ceeaade33ee6b4 Reviewed-by: Thiago Macieira Reviewed-by: Mårten Nordheim --- src/corelib/text/qbytearray.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/corelib/text/qbytearray.cpp b/src/corelib/text/qbytearray.cpp index 1219b3d86d..bb517e3a53 100644 --- a/src/corelib/text/qbytearray.cpp +++ b/src/corelib/text/qbytearray.cpp @@ -3870,19 +3870,21 @@ QByteArray QByteArray::toBase64(Base64Options options) const const char padchar = '='; qsizetype padlen = 0; - QByteArray tmp((size() + 2) / 3 * 4, Qt::Uninitialized); + const qsizetype sz = size(); + + QByteArray tmp((sz + 2) / 3 * 4, Qt::Uninitialized); qsizetype i = 0; char *out = tmp.data(); - while (i < size()) { + while (i < sz) { // encode 3 bytes at a time int chunk = 0; chunk |= int(uchar(data()[i++])) << 16; - if (i == size()) { + if (i == sz) { padlen = 2; } else { chunk |= int(uchar(data()[i++])) << 8; - if (i == size()) + if (i == sz) padlen = 1; else chunk |= int(uchar(data()[i++]));