diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2024-03-22 17:39:49 +0100 |
---|---|---|
committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2024-04-14 00:04:26 +0200 |
commit | 4183fa4c0b75a76fbc687298f4513971a9230152 (patch) | |
tree | 4b73f3e9105467fff35ffcbd1e93c538b003046f /src/tools | |
parent | 2a7c71bef061d3d54e4de3cd4117e0998567028f (diff) |
Tools: handle file opening failure
Most of the cases, a file handle (stdin/out) is opened without checking
for error. That operation may still fail, so check for it.
Change-Id: I30c3e7b40858acd8b1662622129bd6557722dccd
Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/moc/main.cpp | 7 | ||||
-rw-r--r-- | src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp | 20 | ||||
-rw-r--r-- | src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp | 12 | ||||
-rw-r--r-- | src/tools/qlalr/cppgenerator.cpp | 28 | ||||
-rw-r--r-- | src/tools/rcc/main.cpp | 10 | ||||
-rw-r--r-- | src/tools/uic/driver.cpp | 7 | ||||
-rw-r--r-- | src/tools/uic/uic.cpp | 7 |
7 files changed, 69 insertions, 22 deletions
diff --git a/src/tools/moc/main.cpp b/src/tools/moc/main.cpp index 3df832cc2e..bb51352519 100644 --- a/src/tools/moc/main.cpp +++ b/src/tools/moc/main.cpp @@ -449,11 +449,14 @@ int runMoc(int argc, char **argv) if (filename.isEmpty()) { filename = QStringLiteral("standard input"); - in.open(stdin, QIODevice::ReadOnly); + if (!in.open(stdin, QIODevice::ReadOnly)) { + fprintf(stderr, "moc: cannot open standard input: %s\n", qPrintable(in.errorString())); + return 1; + } } else { in.setFileName(filename); if (!in.open(QIODevice::ReadOnly)) { - fprintf(stderr, "moc: %s: No such file\n", qPrintable(filename)); + fprintf(stderr, "moc: cannot open %s: %s\n", qPrintable(filename), qPrintable(in.errorString())); return 1; } moc.filename = filename.toLocal8Bit(); diff --git a/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp b/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp index ac0c851cd6..3b7d73894b 100644 --- a/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp +++ b/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp @@ -443,15 +443,19 @@ int main(int argc, char **argv) continue; QFile f; + bool fileIsOpen; + QString fileName; if (arg == u'-') { - f.open(stdin, QIODevice::ReadOnly | QIODevice::Text); + fileName = "stdin"_L1; + fileIsOpen = f.open(stdin, QIODevice::ReadOnly | QIODevice::Text); } else { + fileName = arg; f.setFileName(arg); - f.open(QIODevice::ReadOnly | QIODevice::Text); + fileIsOpen = f.open(QIODevice::ReadOnly | QIODevice::Text); } - if (!f.isOpen()) { + if (!fileIsOpen) { fprintf(stderr, PROGRAMNAME ": could not open '%s': %s\n", - qPrintable(arg), qPrintable(f.errorString())); + qPrintable(fileName), qPrintable(f.errorString())); return 1; } @@ -477,11 +481,15 @@ int main(int argc, char **argv) QFile output; if (outputFile.isEmpty()) { - output.open(stdout, QIODevice::WriteOnly); + if (!output.open(stdout, QIODevice::WriteOnly)) { + fprintf(stderr, PROGRAMNAME ": could not open standard output: %s\n", + qPrintable(output.errorString())); + return 1; + } } else { output.setFileName(outputFile); if (!output.open(QIODevice::WriteOnly)) { - fprintf(stderr, PROGRAMNAME ": could not open output file '%s': %s", + fprintf(stderr, PROGRAMNAME ": could not open output file '%s': %s\n", qPrintable(outputFile), qPrintable(output.errorString())); return 1; } diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp index 54fd7b2c7c..579604286c 100644 --- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp +++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp @@ -144,10 +144,18 @@ QDBusIntrospection::Interfaces QDBusXmlToCpp::readInput() QFile input(inputFile); if (inputFile.isEmpty() || inputFile == "-"_L1) { reporter.setFileName("<standard input>"_L1); - input.open(stdin, QIODevice::ReadOnly); + if (!input.open(stdin, QIODevice::ReadOnly)) { + fprintf(stderr, PROGRAMNAME ": could not open standard input: %s\n", + qPrintable(input.errorString())); + exit(1); + } } else { reporter.setFileName(inputFile); - input.open(QIODevice::ReadOnly); + if (!input.open(QIODevice::ReadOnly)) { + fprintf(stderr, PROGRAMNAME ": could not open input file '%s': %s\n", + qPrintable(inputFile), qPrintable(input.errorString())); + exit(1); + } } QByteArray data = input.readAll(); diff --git a/src/tools/qlalr/cppgenerator.cpp b/src/tools/qlalr/cppgenerator.cpp index c859df366d..fd56de106d 100644 --- a/src/tools/qlalr/cppgenerator.cpp +++ b/src/tools/qlalr/cppgenerator.cpp @@ -348,7 +348,12 @@ void CppGenerator::operator () () { // decls... QFile f (declFileName); - f.open (QFile::WriteOnly); + if (! f.open (QFile::WriteOnly)) + { + fprintf (stderr, "*** cannot create %s: %s\n", + qPrintable(declFileName), qPrintable(f.errorString())); + return; + } QTextStream out (&f); QString prot = declFileName.toUpper ().replace (QLatin1Char ('.'), QLatin1Char ('_')); @@ -380,7 +385,12 @@ void CppGenerator::operator () () { // bits... QFile f (bitsFileName); - f.open (QFile::WriteOnly); + if (! f.open (QFile::WriteOnly)) + { + fprintf (stderr, "*** cannot create %s: %s\n", + qPrintable(bitsFileName), qPrintable(f.errorString())); + return; + } QTextStream out (&f); // copyright headers must come first, otherwise the headers tests will fail @@ -401,7 +411,12 @@ void CppGenerator::operator () () if (! grammar.decl_file_name.isEmpty ()) { QFile f (grammar.decl_file_name); - f.open (QFile::WriteOnly); + if (! f.open (QFile::WriteOnly)) + { + fprintf (stderr, "*** cannot create %s: %s\n", + qPrintable(grammar.decl_file_name), qPrintable(f.errorString())); + return; + } QTextStream out (&f); out << p.decls(); } @@ -409,7 +424,12 @@ void CppGenerator::operator () () if (! grammar.impl_file_name.isEmpty ()) { QFile f (grammar.impl_file_name); - f.open (QFile::WriteOnly); + if (! f.open (QFile::WriteOnly)) + { + fprintf (stderr, "*** cannot create %s: %s\n", + qPrintable(grammar.impl_file_name), qPrintable(f.errorString())); + return; + } QTextStream out (&f); out << p.impls(); } diff --git a/src/tools/rcc/main.cpp b/src/tools/rcc/main.cpp index 2751bc39d6..03709ccbd4 100644 --- a/src/tools/rcc/main.cpp +++ b/src/tools/rcc/main.cpp @@ -303,7 +303,8 @@ int runRcc(int argc, char *argv[]) return 1; } QFile errorDevice; - errorDevice.open(stderr, QIODevice::WriteOnly|QIODevice::Text); + if (!errorDevice.open(stderr, QIODevice::WriteOnly|QIODevice::Text)) + return 1; if (library.verbose()) errorDevice.write("Qt resource compiler\n"); @@ -341,7 +342,12 @@ int runRcc(int argc, char *argv[]) mode &= ~QIODevice::Text; #endif // Q_OS_WIN // using this overload close() only flushes. - out.open(stdout, mode); + if (!out.open(stdout, mode)) { + const QString msg = QString::fromLatin1("Unable to open standard output for writing: %1\n") + .arg(out.errorString()); + errorDevice.write(msg.toUtf8()); + return 1; + } } else { out.setFileName(outFilename); if (!out.open(mode)) { diff --git a/src/tools/uic/driver.cpp b/src/tools/uic/driver.cpp index ab19f5a2b4..110764ee07 100644 --- a/src/tools/uic/driver.cpp +++ b/src/tools/uic/driver.cpp @@ -245,9 +245,10 @@ bool Driver::uic(const QString &fileName, DomUI *ui, QTextStream *out) bool Driver::uic(const QString &fileName, QTextStream *out) { QFile f; - if (fileName.isEmpty()) - f.open(stdin, QIODevice::ReadOnly); - else { + if (fileName.isEmpty()) { + if (!f.open(stdin, QIODevice::ReadOnly)) + return false; + } else { f.setFileName(fileName); if (!f.open(QIODevice::ReadOnly)) return false; diff --git a/src/tools/uic/uic.cpp b/src/tools/uic/uic.cpp index caf5ff4e1f..fb0a37d21d 100644 --- a/src/tools/uic/uic.cpp +++ b/src/tools/uic/uic.cpp @@ -38,9 +38,10 @@ bool Uic::printDependencies() QString fileName = opt.inputFile; QFile f; - if (fileName.isEmpty()) - f.open(stdin, QIODevice::ReadOnly); - else { + if (fileName.isEmpty()) { + if (!f.open(stdin, QIODevice::ReadOnly)) + return false; + } else { f.setFileName(fileName); if (!f.open(QIODevice::ReadOnly)) return false; |