Avoid signed integer overflow by making an addition a subtraction

The task has a very good explanation. The use-case was
  ba.remove(n, INT_MAX);
since you can't pass -1 to the length, and that results in overflow when
you add n+INT_MAX.

Task-number: QTBUG-34694
Change-Id: I365eb86b2d0dabbe0bde67e4e7f33d64fd5793af
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
This commit is contained in:
Thiago Macieira 2013-11-08 08:32:34 -08:00 committed by The Qt Project
parent f767d3a1b2
commit 315ba388f3

View File

@ -1854,7 +1854,7 @@ QByteArray &QByteArray::remove(int pos, int len)
if (len <= 0 || uint(pos) >= uint(d->size))
return *this;
detach();
if (pos + len >= d->size) {
if (len >= d->size - pos) {
resize(pos);
} else {
memmove(d->data() + pos, d->data() + pos + len, d->size - pos - len);