aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/declarative/qml/qdeclarativetypeloader.cpp2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/remoteLoadCrash.qml3
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp16
3 files changed, 21 insertions, 0 deletions
diff --git a/src/declarative/qml/qdeclarativetypeloader.cpp b/src/declarative/qml/qdeclarativetypeloader.cpp
index 47c90bd186..cb3e8aef3e 100644
--- a/src/declarative/qml/qdeclarativetypeloader.cpp
+++ b/src/declarative/qml/qdeclarativetypeloader.cpp
@@ -379,8 +379,10 @@ void QDeclarativeDataBlob::tryDone()
m_status = Complete;
m_isDone = true;
+ addref();
done();
notifyAllWaitingOnMe();
+ release();
}
}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/remoteLoadCrash.qml b/tests/auto/declarative/qdeclarativelanguage/data/remoteLoadCrash.qml
new file mode 100644
index 0000000000..d96a31f8f7
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/remoteLoadCrash.qml
@@ -0,0 +1,3 @@
+import QtQuick 1.0
+Text {
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
index 328b7c8da1..dfaf3d1618 100644
--- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
+++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
@@ -160,6 +160,7 @@ private slots:
void revisionOverloads();
void propertyInit();
+ void remoteLoadCrash();
// regression tests for crashes
void crash1();
@@ -2069,6 +2070,21 @@ void tst_qdeclarativelanguage::registrationOrder()
delete o;
}
+// QTBUG-18268
+void tst_qdeclarativelanguage::remoteLoadCrash()
+{
+ TestHTTPServer server(14448);
+ server.serveDirectory(SRCDIR);
+
+ QDeclarativeComponent component(&engine);
+ component.setData("import QtQuick 1.0; Text {}", QUrl("http://127.0.0.1:14448/data/remoteLoadCrash.qml"));
+ while (component.isLoading())
+ QCoreApplication::processEvents( QEventLoop::ExcludeUserInputEvents | QEventLoop::WaitForMoreEvents, 50);
+
+ QObject *o = component.create();
+ delete o;
+}
+
QTEST_MAIN(tst_qdeclarativelanguage)
#include "tst_qdeclarativelanguage.moc"