aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDuncan Cunningham <duncanc4@gmail.com>2013-07-31 17:12:24 -0500
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-08-05 17:00:05 +0200
commitce65fb47ed53d8ce2a00cdd399bbe8a28c4fb10d (patch)
tree06baeaa3f2182bf6e856151e591f00d7629ec017 /src
parent0316506d9ddbc3ca9f26f880b9e7fb5d5b0fec36 (diff)
Fix crash in QQmlDebugService::objectForLocationInfo()
Fixed crash in QQmlDebugService::objectForLocationInfo() where it was using QObject pointers in the object reference id hash table that had been deleted. Now objectForLocationInfo() checks if the QObject has been deleted and removes it from the object reference hash before trying to look up the filename, line number, and column number. Change-Id: Iba7be7c490e97a2e7685685b0c6e501cfe1e833e Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com> Reviewed-by: Aurindam Jana <aurindam.jana@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/qml/debugger/qqmldebugservice.cpp36
1 files changed, 18 insertions, 18 deletions
diff --git a/src/qml/debugger/qqmldebugservice.cpp b/src/qml/debugger/qqmldebugservice.cpp
index f9a8090da2..f036dd9d69 100644
--- a/src/qml/debugger/qqmldebugservice.cpp
+++ b/src/qml/debugger/qqmldebugservice.cpp
@@ -215,25 +215,25 @@ QList<QObject*> QQmlDebugService::objectForLocationInfo(const QString &filename,
{
ObjectReferenceHash *hash = objectReferenceHash();
QList<QObject*> objects;
- QHash<int, QObject *>::Iterator iter;
- for (iter = hash->ids.begin(); iter != hash->ids.end(); ++iter) {
- QQmlData *ddata = QQmlData::get(iter.value());
- if (!ddata || !ddata->outerContext)
- continue;
- //column number may be different due to qmlrewriter
- if (QFileInfo(ddata->outerContext->urlString).fileName() == filename &&
- ddata->lineNumber == lineNumber &&
- ddata->columnNumber >= columnNumber) {
- QHash<QObject *, ObjectReference>::Iterator objIter =
- hash->objects.find(*iter);
- Q_ASSERT(objIter != hash->objects.end());
-
- if (objIter->object == 0) {
- hash->ids.erase(iter);
- hash->objects.erase(objIter);
- } else {
- objects << *iter;
+ QHash<int, QObject *>::Iterator iter = hash->ids.begin();
+ while (iter != hash->ids.end()) {
+ QHash<QObject *, ObjectReference>::Iterator objIter =
+ hash->objects.find(*iter);
+ Q_ASSERT(objIter != hash->objects.end());
+
+ if (objIter->object == 0) {
+ iter = hash->ids.erase(iter);
+ hash->objects.erase(objIter);
+ } else {
+ QQmlData *ddata = QQmlData::get(iter.value());
+ if (ddata && ddata->outerContext) {
+ if (QFileInfo(ddata->outerContext->urlString).fileName() == filename &&
+ ddata->lineNumber == lineNumber &&
+ ddata->columnNumber >= columnNumber) {
+ objects << *iter;
+ }
}
+ ++iter;
}
}
return objects;