qt5base-lts/tests/auto/corelib/tools
Marc Mutz e4c6d73f92 QRect: fix UB (int overflow) in center()
QRect::center() should be defined for any
  QRect(x1,y1,x2,x2), INT_MIN <= x1, x2, y1, y2 <= INT_MAX
because the average of two signed integers is always
representable as a signed integer.

But not when it's calculated as (x1+x2)/2, since that
expression overflows when x1 > INT_MAX - x2.

Instead of playing games with Hacker's Delight-style
expressions, or use Google's patented algorithm, which
requires two divisions, take advantage of the fact that
int is not intmax_t and perform the calculation in the
qint64 domain. The cast back to int is always well-
defined since, as mentioned, the result is always
representable in an int.

Fix a test-case that expected a nonsensical result due
to overflow.

[ChangeLog][QtCore][QRect] Fixed integer overflow in
center(). This fixes the result for some corner-cases
like a 1x1 rectangle at (INT_MIN, INT_MIN), for which
the previous implementation could return anything
(due to invoking undefined behavior), but commonly
returned (0, 0).

Change-Id: I1a885ca6dff770327dd31655c3eb473fcfeb8878
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2016-03-15 11:23:46 +00:00
..
collections tst_collections: "explicit instantiation of 'NS::QList' must occur in namespace 'NS'" 2015-12-23 08:35:49 +00:00
qalgorithms Purge extraneous execute permissions. 2015-09-30 18:26:21 +00:00
qarraydata Update copyright headers 2015-02-11 06:49:51 +00:00
qarraydata_strictiterators
qbitarray Update copyright headers 2015-02-11 06:49:51 +00:00
qbytearray QByteArray: add {const_,reverse_iterator}, {c,}r{begin,end}() 2015-07-07 05:22:08 +00:00
qbytearraylist Update copyright headers 2015-02-11 06:49:51 +00:00
qbytearraymatcher Update copyright headers 2015-02-11 06:49:51 +00:00
qbytedatabuffer Update copyright headers 2015-02-11 06:49:51 +00:00
qcache Update copyright headers 2015-02-11 06:49:51 +00:00
qchar Update Unicode data & algorithms up to v8.0 2015-11-05 08:25:02 +00:00
qcollator Replace MAC OS X with OS X 2015-06-30 07:33:31 +00:00
qcommandlineparser QCommandLineOption: optimize ctors 2015-06-19 16:29:50 +00:00
qcontiguouscache Fix compilation of QContiguousCache::operator= 2015-05-20 17:23:33 +00:00
qcryptographichash Update copyright headers 2015-02-11 06:49:51 +00:00
qdate QDate: fix calculation of the week number for the last days of 2020 2016-01-09 09:13:44 +00:00
qdatetime Remove a mis-placed QSKIP(). 2016-02-26 09:22:35 +00:00
qeasingcurve Remove the tests for Ubuntu Oneiric (11.10) 2015-03-17 01:26:13 +00:00
qelapsedtimer Update copyright headers 2015-02-11 06:49:51 +00:00
qexplicitlyshareddatapointer Update copyright headers 2015-02-11 06:49:51 +00:00
qfreelist Update copyright headers 2015-02-11 06:49:51 +00:00
qhash Introduce QHash key iterators 2015-07-28 19:11:17 +00:00
qhash_strictiterators
qhashfunctions Add getter and setter for qt_qhash_seed 2015-09-22 14:17:46 +00:00
qlatin1string Use correct test to add C++14 to the project configuration 2015-12-01 15:46:31 +00:00
qline Update copyright headers 2015-02-11 06:49:51 +00:00
qlinkedlist QLinkedList/QSet: add {const_,}reverse_iterator, {c,}r{begin,end}() 2015-10-13 18:07:20 +00:00
qlist Tests: Replace Q[TRY]_VERIFY(v == true|false) by QVERIFY(v)|QVERIFY(!v). 2015-07-27 12:09:19 +00:00
qlist_strictiterators
qlocale Cleanup testcase for platforms without QProcess support. 2016-02-09 15:45:17 +00:00
qmap Introduce QMap key iterators 2015-07-28 19:11:12 +00:00
qmap_strictiterators
qmargins Update copyright headers 2015-02-11 06:49:51 +00:00
qmessageauthenticationcode Update copyright headers 2015-02-11 06:49:51 +00:00
qpair Update copyright headers 2015-02-11 06:49:51 +00:00
qpoint Update copyright headers 2015-02-11 06:49:51 +00:00
qpointf Fix build of tests on QNX. 2015-03-14 07:05:34 +00:00
qqueue Update copyright headers 2015-02-11 06:49:51 +00:00
qrect QRect: fix UB (int overflow) in center() 2016-03-15 11:23:46 +00:00
qregexp Add qHash(QRegExp) and qHash(QRegularExpression) 2015-05-05 13:59:31 +00:00
qregularexpression Merge remote-tracking branch 'origin/5.5' into 5.6 2015-08-26 20:06:57 +02:00
qringbuffer Replace QVERIFY with QCOMPARE in QRingBuffer autotest 2015-06-23 05:59:13 +00:00
qscopedpointer Update copyright headers 2015-02-11 06:49:51 +00:00
qscopedvaluerollback Update copyright headers 2015-02-11 06:49:51 +00:00
qset QLinkedList/QSet: add {const_,}reverse_iterator, {c,}r{begin,end}() 2015-10-13 18:07:20 +00:00
qsharedpointer Merge remote-tracking branch 'origin/5.5' into 5.6 2016-01-19 10:03:01 +01:00
qsize Update copyright headers 2015-02-11 06:49:51 +00:00
qsizef Update copyright headers 2015-02-11 06:49:51 +00:00
qstl Update copyright headers 2015-02-11 06:49:51 +00:00
qstring Revert "QString: preserve embedded NULs when converting from QByteArray" 2016-01-12 06:13:05 +00:00
qstring_no_cast_from_bytearray Update copyright headers 2015-02-11 06:49:51 +00:00
qstringbuilder Update copyright headers 2015-02-11 06:49:51 +00:00
qstringiterator Update copyright headers 2015-02-11 06:49:51 +00:00
qstringlist Update copyright headers 2015-02-11 06:49:51 +00:00
qstringmatcher Update copyright headers 2015-02-11 06:49:51 +00:00
qstringref QStringRef: add truncate() 2015-06-19 05:41:41 +00:00
qtextboundaryfinder Update Unicode data files to v8.0 2015-11-05 08:24:58 +00:00
qtime Avoid overflow in QTime::addSecs with too big a number of seconds 2015-08-19 22:13:40 +00:00
qtimeline Stabilize tst_qtimeline::resume 2015-12-21 08:53:21 +00:00
qtimezone Merge remote-tracking branch 'origin/5.5' into dev 2015-08-06 10:54:01 +02:00
qvarlengtharray Merge remote-tracking branch 'origin/5.5' into HEAD 2015-07-17 16:35:42 +02:00
qvector QVector: add an rvalue overload of push_back/append 2015-07-19 18:09:27 +00:00
qvector_strictiterators
qversionnumber Use correct test to add C++14 to the project configuration 2015-12-01 15:46:31 +00:00
tools.pro QLatin1String: add test 2015-10-19 15:55:21 +00:00