From 69c05bbef47fb9d30d70e594bd5942add8b135fe Mon Sep 17 00:00:00 2001 From: Liang Qi <liang.qi@digia.com> Date: Tue, 14 May 2013 13:46:12 +0200 Subject: [PATCH] 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> --- src/widgets/dialogs/qprogressdialog.cpp | 1 + .../dialogs/qprogressdialog/tst_qprogressdialog.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/src/widgets/dialogs/qprogressdialog.cpp b/src/widgets/dialogs/qprogressdialog.cpp index 78612f31816..b5cc630bfe5 100644 --- a/src/widgets/dialogs/qprogressdialog.cpp +++ b/src/widgets/dialogs/qprogressdialog.cpp @@ -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 diff --git a/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp b/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp index d49f356d8c4..68502f0d8d4 100644 --- a/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp +++ b/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp @@ -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" -- GitLab