Git: Fix potential heap use after free

Closing the dialog before the process terminates might lead to this.

Task-number: QTCREATORBUG-13075
Change-Id: I3b6ffcca010eb356b14d87f2a7d62090c158faba
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Orgad Shaneh
2014-09-21 22:28:19 +03:00
committed by Orgad Shaneh
parent 3f3554eb13
commit 72c33cbadd
2 changed files with 13 additions and 7 deletions

View File

@@ -94,8 +94,8 @@ ChangeSelectionDialog::ChangeSelectionDialog(const QString &workingDirectory, Co
ChangeSelectionDialog::~ChangeSelectionDialog() ChangeSelectionDialog::~ChangeSelectionDialog()
{ {
terminateProcess();
delete m_ui; delete m_ui;
delete m_process;
} }
QString ChangeSelectionDialog::change() const QString ChangeSelectionDialog::change() const
@@ -197,6 +197,16 @@ void ChangeSelectionDialog::enableButtons(bool b)
m_ui->checkoutButton->setEnabled(b); m_ui->checkoutButton->setEnabled(b);
} }
void ChangeSelectionDialog::terminateProcess()
{
if (!m_process)
return;
m_process->kill();
m_process->waitForFinished();
delete m_process;
m_process = 0;
}
void ChangeSelectionDialog::recalculateCompletion() void ChangeSelectionDialog::recalculateCompletion()
{ {
const QString workingDir = workingDirectory(); const QString workingDir = workingDirectory();
@@ -219,12 +229,7 @@ void ChangeSelectionDialog::recalculateCompletion()
void ChangeSelectionDialog::recalculateDetails() void ChangeSelectionDialog::recalculateDetails()
{ {
if (m_process) { terminateProcess();
m_process->kill();
m_process->waitForFinished();
delete m_process;
m_process = 0;
}
enableButtons(false); enableButtons(false);
const QString workingDir = workingDirectory(); const QString workingDir = workingDirectory();

View File

@@ -85,6 +85,7 @@ private slots:
private: private:
void enableButtons(bool b); void enableButtons(bool b);
void terminateProcess();
Ui::ChangeSelectionDialog *m_ui; Ui::ChangeSelectionDialog *m_ui;