QByteArray: more GCC 12 -Werror=array-bound whack-a-mole
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 <thiago.macieira@intel.com> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
parent
246f17d470
commit
de005e7976
@ -3870,19 +3870,21 @@ QByteArray QByteArray::toBase64(Base64Options options) const
|
|||||||
const char padchar = '=';
|
const char padchar = '=';
|
||||||
qsizetype padlen = 0;
|
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;
|
qsizetype i = 0;
|
||||||
char *out = tmp.data();
|
char *out = tmp.data();
|
||||||
while (i < size()) {
|
while (i < sz) {
|
||||||
// encode 3 bytes at a time
|
// encode 3 bytes at a time
|
||||||
int chunk = 0;
|
int chunk = 0;
|
||||||
chunk |= int(uchar(data()[i++])) << 16;
|
chunk |= int(uchar(data()[i++])) << 16;
|
||||||
if (i == size()) {
|
if (i == sz) {
|
||||||
padlen = 2;
|
padlen = 2;
|
||||||
} else {
|
} else {
|
||||||
chunk |= int(uchar(data()[i++])) << 8;
|
chunk |= int(uchar(data()[i++])) << 8;
|
||||||
if (i == size())
|
if (i == sz)
|
||||||
padlen = 1;
|
padlen = 1;
|
||||||
else
|
else
|
||||||
chunk |= int(uchar(data()[i++]));
|
chunk |= int(uchar(data()[i++]));
|
||||||
|
Loading…
Reference in New Issue
Block a user