From 0e20635c39417ebf79f43a9890d777a52caf9922 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Sat, 17 Sep 2016 12:10:36 +0200 Subject: [PATCH] moc: error out when the Q_PLUGIN_METADATA file can't be opened Task-number: QTBUG-56045 Change-Id: Ib058791036a2728dcd6215009a4ff206278bed14 Reviewed-by: Thiago Macieira --- src/tools/moc/moc.cpp | 7 ++++++- tests/auto/tools/moc/tst_moc.cpp | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index 03f022da695..e2987f1be47 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -1294,7 +1294,12 @@ void Moc::parsePluginData(ClassDef *def) return; } QFile file(fi.canonicalFilePath()); - file.open(QFile::ReadOnly); + if (!file.open(QFile::ReadOnly)) { + QByteArray msg = "Plugin Metadata file " + lexem() + " could not be opened: " + + file.errorString().toUtf8(); + error(msg.constData()); + return; + } metaData = file.readAll(); } } diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index ecf6c7e9922..e704a6877e4 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -2145,6 +2145,22 @@ void tst_Moc::warnings_data() << 0 << QString() << QString("standard input:1: Note: No relevant classes found. No output generated."); + + QTest::newRow("Q_PLUGIN_METADATA: invalid file") + << QByteArray("class X { \n Q_PLUGIN_METADATA(FILE \"does.not.exists\") \n };") + << QStringList() + << 1 + << QString() + << QString("standard input:2: Error: Plugin Metadata file \"does.not.exists\" does not exist. Declaration will be ignored"); + +#ifdef Q_OS_LINUX // Limit to Linux because the error message is platform-dependent + QTest::newRow("Q_PLUGIN_METADATA: unreadable file") + << QByteArray("class X { \n Q_PLUGIN_METADATA(FILE \".\") \n };") + << QStringList() + << 1 + << QString() + << QString("standard input:2: Error: Plugin Metadata file \".\" could not be opened: file to open is a directory"); +#endif } void tst_Moc::warnings()