Details
-
Bug
-
Resolution: Done
-
P3: Somewhat important
-
5.10.1, 5.11.0, 5.11.1, 5.11.2, 5.11.3, 5.12.0, 5.12.1
-
-
0b7e479235aec74f051af4d5ef95e74753b59c6d (qt/qtdeclarative/5.12)
Description
qml/qml/qqmlimport.cpp: QQmlImportsPrivate::addFileImport():
...... QString importUri = uri; QString qmldirUrl = resolveLocalUrl(base, importUri + (importUri.endsWith(Slash) ? String_qmldir : Slash_qmldir)); if (QQmlAbstractUrlInterceptor *interceptor = typeLoader->engine()->urlInterceptor()) { qmldirUrl = interceptor->intercept(QUrl(qmldirUrl), QQmlAbstractUrlInterceptor::QmldirFile).toString(); } QString qmldirIdentifier; if (QQmlFile::isLocalFile(qmldirUrl)) { QString localFileOrQrc = QQmlFile::urlToLocalFileOrQrc(qmldirUrl); Q_ASSERT(!localFileOrQrc.isEmpty()); QString dir = QQmlFile::urlToLocalFileOrQrc(resolveLocalUrl(base, importUri)); if (!typeLoader->directoryExists(dir)) { if (!isImplicitImport) { QQmlError error; error.setDescription(QQmlImportDatabase::tr("\"%1\": no such directory").arg(uri)); error.setUrl(QUrl(qmldirUrl)); errors->prepend(error); } return false; } ......
After qmldirUrl getting intercepted,
if (!typeLoader->directoryExists(dir)) {
it checks whether dir is existed on local driver,
QString dir = QQmlFile::urlToLocalFileOrQrc(resolveLocalUrl(base, importUri));
However, dir is composited from importUrl which is not intercepted, this will make intercepting local qmldir file import impossible.