QtWidgets: avoid integer divide by zero in QProgressDialog

Autotest is included.

Task-number: QTBUG-31046
Change-Id: Ie549b59112f458de478294fa00443a3cf6898c85
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
This commit is contained in:
Liang Qi 2013-05-14 13:46:12 +02:00 committed by The Qt Project
parent 252cba3cd5
commit 69c05bbef4
2 changed files with 12 additions and 0 deletions

View File

@ -662,6 +662,7 @@ void QProgressDialog::setValue(int progress)
int estimate;
int totalSteps = maximum() - minimum();
int myprogress = progress - minimum();
if (myprogress == 0) myprogress = 1;
if ((totalSteps - myprogress) >= INT_MAX / elapsed)
estimate = (totalSteps - myprogress) / myprogress * elapsed;
else

View File

@ -46,6 +46,7 @@
#include <qdebug.h>
#include <qprogressdialog.h>
#include <qlabel.h>
#include <qthread.h>
class tst_QProgressDialog : public QObject
{
@ -58,6 +59,7 @@ public:
private slots:
void getSetCheck();
void task198202();
void QTBUG_31046();
};
tst_QProgressDialog::tst_QProgressDialog()
@ -149,5 +151,14 @@ void tst_QProgressDialog::task198202()
QCOMPARE(dlg.sizeHint().height(), futureHeight);
}
void tst_QProgressDialog::QTBUG_31046()
{
QProgressDialog dlg("", "", 50, 60);
dlg.setValue(0);
QThread::msleep(200);
dlg.setValue(50);
QCOMPARE(50, dlg.value());
}
QTEST_MAIN(tst_QProgressDialog)
#include "tst_qprogressdialog.moc"