Branch data Line data Source code
1 : : #include <QCoreApplication>
2 : : #include <QJsonDocument>
3 : : #include <QJsonObject>
4 : : #include <QTextStream>
5 : : #include <QVersionNumber>
6 : : #include <QtWebEngineCore/qtwebenginecoreglobal.h>
7 : :
8 : : namespace {
9 : :
10 : 3 : bool versionAtLeast(const QString &actual, const QString &minimum) {
11 [ + - ]: 3 : const QVersionNumber actualVersion = QVersionNumber::fromString(actual);
12 [ + - ]: 3 : const QVersionNumber minimumVersion = QVersionNumber::fromString(minimum);
13 [ + - + - : 6 : return !actualVersion.isNull() && !minimumVersion.isNull() &&
+ - ]
14 : 6 : QVersionNumber::compare(actualVersion, minimumVersion) >= 0;
15 : 3 : }
16 : :
17 : : } // namespace
18 : :
19 : 1 : int main(int argc, char **argv) {
20 [ + - ]: 1 : QCoreApplication app(argc, argv);
21 [ + - + - ]: 1 : const QStringList arguments = app.arguments().mid(1);
22 [ + + ]: 2 : for (const QString &argument : arguments) {
23 [ - + + - : 3 : if (argument != QStringLiteral("--check") &&
- + ]
24 [ - - - + : 1 : argument != QStringLiteral("--json")) {
- + + - ]
25 [ # # # # : 0 : QTextStream(stderr) << "Usage: " << app.applicationName()
# # # # ]
26 [ # # ]: 0 : << " [--json] [--check]\n";
27 : 0 : return 2;
28 : : }
29 : : }
30 : :
31 : : const QString qtWebEngine =
32 [ + - ]: 1 : QString::fromUtf8(MAILJD_QT_WEBENGINE_PACKAGE_VERSION);
33 [ + - ]: 1 : const QString qtPdf = QString::fromUtf8(MAILJD_QT_PDF_PACKAGE_VERSION);
34 [ + - ]: 1 : const QString chromium = QString::fromUtf8(qWebEngineChromiumVersion());
35 : : const QString chromiumPatch =
36 [ + - ]: 1 : QString::fromUtf8(qWebEngineChromiumSecurityPatchVersion());
37 : : const QString minimumQtWebEngine =
38 [ + - ]: 1 : QString::fromUtf8(MAILJD_MIN_QT_WEBENGINE_VERSION);
39 [ + - ]: 1 : const QString minimumQtPdf = QString::fromUtf8(MAILJD_MIN_QT_PDF_VERSION);
40 : : const QString minimumChromiumPatch =
41 [ + - ]: 1 : QString::fromUtf8(MAILJD_MIN_CHROMIUM_SECURITY_PATCH);
42 : :
43 : : const bool webEngineCompliant =
44 [ + - ]: 1 : versionAtLeast(qtWebEngine, minimumQtWebEngine);
45 [ + - ]: 1 : const bool pdfCompliant = versionAtLeast(qtPdf, minimumQtPdf);
46 : : const bool chromiumCompliant =
47 [ + - ]: 1 : versionAtLeast(chromiumPatch, minimumChromiumPatch);
48 : 1 : const bool compliant =
49 [ + - + - : 1 : webEngineCompliant && pdfCompliant && chromiumCompliant;
+ - ]
50 : :
51 : : const QJsonObject runtime{
52 [ + - ]: 2 : {QStringLiteral("qtCore"), QString::fromUtf8(qVersion())},
53 : 2 : {QStringLiteral("qtWebEnginePackage"), qtWebEngine},
54 : 2 : {QStringLiteral("qtPdfPackage"), qtPdf},
55 : 2 : {QStringLiteral("chromium"), chromium},
56 : 2 : {QStringLiteral("chromiumSecurityPatch"), chromiumPatch},
57 : 3 : {QStringLiteral("pdfBackend"), QStringLiteral("PDFium via Qt PDF")},
58 [ + + - - ]: 7 : };
59 : : const QJsonObject minimum{
60 : 2 : {QStringLiteral("qtWebEnginePackage"), minimumQtWebEngine},
61 : 2 : {QStringLiteral("qtPdfPackage"), minimumQtPdf},
62 : 2 : {QStringLiteral("chromiumSecurityPatch"), minimumChromiumPatch},
63 [ + + - - ]: 4 : };
64 : : const QJsonObject checks{
65 : 2 : {QStringLiteral("qtWebEnginePackage"), webEngineCompliant},
66 : 2 : {QStringLiteral("qtPdfPackage"), pdfCompliant},
67 : 2 : {QStringLiteral("chromiumSecurityPatch"), chromiumCompliant},
68 [ + + - - ]: 4 : };
69 : : const QJsonObject report{
70 : 2 : {QStringLiteral("schemaVersion"), 1},
71 : 2 : {QStringLiteral("runtime"), runtime},
72 : 2 : {QStringLiteral("minimum"), minimum},
73 : 2 : {QStringLiteral("checks"), checks},
74 : 2 : {QStringLiteral("compliant"), compliant},
75 [ + + - - ]: 7 : };
76 : :
77 [ + - + - : 1 : QTextStream(stdout) << QJsonDocument(report).toJson(QJsonDocument::Indented);
+ - + - ]
78 [ + - - + : 2 : if (arguments.contains(QStringLiteral("--check")) && !compliant) {
+ - + - -
+ ]
79 [ # # # # ]: 0 : QTextStream(stderr) << "Runtime security policy failed: WebEngine "
80 [ # # # # : 0 : << qtWebEngine << " (minimum " << minimumQtWebEngine
# # ]
81 [ # # # # : 0 : << "), Qt PDF " << qtPdf << " (minimum " << minimumQtPdf
# # # # ]
82 [ # # # # ]: 0 : << "), Chromium security patch " << chromiumPatch
83 [ # # # # : 0 : << " (minimum " << minimumChromiumPatch << ").\n";
# # ]
84 : 0 : return 1;
85 : : }
86 : 1 : return 0;
87 [ + - + - : 22 : }
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - +
- + - - -
- - - - -
- - - - -
- - - - ]
|