summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorBenjamin Lutz <mail@maxlor.com>2013-09-16 14:37:34 +0200
committerJędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>2014-11-27 10:29:08 +0100
commitc6aa76122e209350b8a7b3cb8b5bc8127a3722e7 (patch)
treef53c7953976084d081a63e77f763f75ca665c159 /src/corelib
parentfc3402ca823b74d1a642753c4cc8bef931411ab7 (diff)
Fix size miscalculation in QByteArray::toBase64
The size calculation in QByteArray::toBase64 overcalculates the size required for the output by up to 3 Bytes. This is fixed, which also implies that truncate() at the end is needed only if OmitTrailingEquals is used. Task-number: QTBUG-32436 Change-Id: I92a893047e7aca027c4aa0a6655bcca514585ff5 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/tools/qbytearray.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp
index a622221bd3..6ac442d27b 100644
--- a/src/corelib/tools/qbytearray.cpp
+++ b/src/corelib/tools/qbytearray.cpp
@@ -3571,7 +3571,7 @@ QByteArray QByteArray::toBase64(Base64Options options) const
const char padchar = '=';
int padlen = 0;
- QByteArray tmp((d->size * 4) / 3 + 3, Qt::Uninitialized);
+ QByteArray tmp((d->size + 2) / 3 * 4, Qt::Uninitialized);
int i = 0;
char *out = tmp.data();
@@ -3609,8 +3609,9 @@ QByteArray QByteArray::toBase64(Base64Options options) const
*out++ = alphabet[m];
}
}
-
- tmp.truncate(out - tmp.data());
+ Q_ASSERT((options & OmitTrailingEquals) || (out == tmp.size() + tmp.data()));
+ if (options & OmitTrailingEquals)
+ tmp.truncate(out - tmp.data());
return tmp;
}