From f8fdc82e88dd4546062ee220712c300a654472b9 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Wed, 15 May 2013 12:34:47 +0200 Subject: Widgets: avoid integer divide by zero in QProgressDialog Autotest is included. Task-number: QTBUG-31046 Change-Id: Ief7d71b58e7a5416f3659f19445e5d729849b3b6 (cherry picked from commit 69c05bbef47fb9d30d70e594bd5942add8b135fe) Reviewed-by: J-P Nurmi Reviewed-by: Liang Qi --- src/gui/dialogs/qprogressdialog.cpp | 1 + tests/auto/qprogressdialog/tst_qprogressdialog.cpp | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/gui/dialogs/qprogressdialog.cpp b/src/gui/dialogs/qprogressdialog.cpp index 43bce7d..9bab29a 100644 --- a/src/gui/dialogs/qprogressdialog.cpp +++ b/src/gui/dialogs/qprogressdialog.cpp @@ -693,6 +693,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 diff --git a/tests/auto/qprogressdialog/tst_qprogressdialog.cpp b/tests/auto/qprogressdialog/tst_qprogressdialog.cpp index 953ef48..459a38e 100644 --- a/tests/auto/qprogressdialog/tst_qprogressdialog.cpp +++ b/tests/auto/qprogressdialog/tst_qprogressdialog.cpp @@ -46,11 +46,19 @@ #include #include #include +#include //TESTED_CLASS= //TESTED_FILES= +class TestThread : QThread { +public: + TestThread(unsigned long msecs) { + QThread::msleep(msecs); + } +}; + class tst_QProgressDialog : public QObject { Q_OBJECT @@ -62,6 +70,7 @@ public: private slots: void getSetCheck(); void task198202(); + void QTBUG_31046(); }; tst_QProgressDialog::tst_QProgressDialog() @@ -153,5 +162,14 @@ void tst_QProgressDialog::task198202() QCOMPARE(dlg.sizeHint().height(), futureHeight); } +void tst_QProgressDialog::QTBUG_31046() +{ + QProgressDialog dlg("", "", 50, 60); + dlg.setValue(0); + TestThread(200); + dlg.setValue(50); + QCOMPARE(50, dlg.value()); +} + QTEST_MAIN(tst_QProgressDialog) #include "tst_qprogressdialog.moc" -- cgit v0.12