diff options
author | Andreas Sturmlechner <asturm@gentoo.org> | 2021-03-12 18:08:45 +0100 |
---|---|---|
committer | Andreas Sturmlechner <asturm@gentoo.org> | 2021-03-12 21:06:39 +0100 |
commit | 286732e1677d672669f19607f1db62780c62d746 (patch) | |
tree | a1fe7f573b4817cea03304ba897545e804391bfb /dev-qt/qtwebengine | |
parent | dev-ruby/rspec-mocks: stable 3.9.1 for ppc64 (diff) | |
download | gentoo-286732e1677d672669f19607f1db62780c62d746.tar.gz gentoo-286732e1677d672669f19607f1db62780c62d746.tar.bz2 gentoo-286732e1677d672669f19607f1db62780c62d746.zip |
dev-qt/qtwebengine: Fix runtime crash with certain locales
Due to the pain a revbump will cause and only a minority of users affected,
the patch is applied in place and we will ask affected users to rebuild.
Reported-by: 12101111 <w12101111@outlook.com>
Thanks-to: Florian Bruhin <gentoo.org@the-compiler.org>
Bug: https://bugs.gentoo.org/757606
Package-Manager: Portage-3.0.17, Repoman-3.0.2
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
Diffstat (limited to 'dev-qt/qtwebengine')
-rw-r--r-- | dev-qt/qtwebengine/files/qtwebengine-5.15.2_p20210224-fix-crash-w-app-locales.patch | 135 | ||||
-rw-r--r-- | dev-qt/qtwebengine/qtwebengine-5.15.2_p20210224.ebuild | 3 |
2 files changed, 137 insertions, 1 deletions
diff --git a/dev-qt/qtwebengine/files/qtwebengine-5.15.2_p20210224-fix-crash-w-app-locales.patch b/dev-qt/qtwebengine/files/qtwebengine-5.15.2_p20210224-fix-crash-w-app-locales.patch new file mode 100644 index 000000000000..3a372381ebd8 --- /dev/null +++ b/dev-qt/qtwebengine/files/qtwebengine-5.15.2_p20210224-fix-crash-w-app-locales.patch @@ -0,0 +1,135 @@ +From 199ea00a9eea13315a652c62778738629185b059 Mon Sep 17 00:00:00 2001 +From: Allan Sandfeld Jensen <allan.jensen@qt.io> +Date: Wed, 10 Mar 2021 17:14:27 +0100 +Subject: Fix normalization of app locales +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Use the internal Chromium routine to get the app locale Chromium +expects. + +Fixes: QTBUG-91715 +Change-Id: I5042eb066cb6879ad69628959912f2841867b4e8 +Reviewed-by: Michael Brüning <michael.bruning@qt.io> +--- + src/core/content_browser_client_qt.cpp | 7 ++++++- + src/core/content_browser_client_qt.h | 2 ++ + src/core/web_engine_library_info.cpp | 18 ++++++++-------- + .../widgets/qwebengineview/tst_qwebengineview.cpp | 24 ++++++++++++++++++++++ + 4 files changed, 40 insertions(+), 11 deletions(-) + +diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp +index e13ecd8d1..c2c78ff8b 100644 +--- a/src/core/content_browser_client_qt.cpp ++++ b/src/core/content_browser_client_qt.cpp +@@ -471,7 +471,12 @@ std::unique_ptr<net::ClientCertStore> ContentBrowserClientQt::CreateClientCertSt + + std::string ContentBrowserClientQt::GetApplicationLocale() + { +- return WebEngineLibraryInfo::getApplicationLocale(); ++ std::string bcp47Name = QLocale().bcp47Name().toStdString(); ++ if (m_cachedQtLocale != bcp47Name) { ++ m_cachedQtLocale = bcp47Name; ++ m_appLocale = WebEngineLibraryInfo::getApplicationLocale(); ++ } ++ return m_appLocale; + } + + std::string ContentBrowserClientQt::GetAcceptLangs(content::BrowserContext *context) +diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h +index 7c8aa3ac9..1ccd2926d 100644 +--- a/src/core/content_browser_client_qt.h ++++ b/src/core/content_browser_client_qt.h +@@ -269,6 +269,8 @@ public: + + private: + scoped_refptr<ShareGroupQtQuick> m_shareGroupQtQuick; ++ std::string m_appLocale; ++ std::string m_cachedQtLocale; + }; + + } // namespace QtWebEngineCore +diff --git a/src/core/web_engine_library_info.cpp b/src/core/web_engine_library_info.cpp +index 2ad5b7565..09a4141b0 100644 +--- a/src/core/web_engine_library_info.cpp ++++ b/src/core/web_engine_library_info.cpp +@@ -46,6 +46,7 @@ + #include "components/spellcheck/spellcheck_buildflags.h" + #include "content/public/common/content_paths.h" + #include "sandbox/policy/switches.h" ++#include "ui/base/l10n/l10n_util.h" + #include "ui/base/ui_base_paths.h" + #include "ui/base/ui_base_switches.h" + +@@ -353,18 +354,15 @@ base::string16 WebEngineLibraryInfo::getApplicationName() + std::string WebEngineLibraryInfo::getApplicationLocale() + { + base::CommandLine *parsedCommandLine = base::CommandLine::ForCurrentProcess(); +- if (!parsedCommandLine->HasSwitch(switches::kLang)) { ++ if (parsedCommandLine->HasSwitch(switches::kLang)) { ++ return parsedCommandLine->GetSwitchValueASCII(switches::kLang); ++ } else { + const QString &locale = QLocale().bcp47Name(); +- +- // QLocale::bcp47Name returns "en" for American English locale. Chromium requires the "US" suffix +- // to clarify the dialect and ignores the shorter version. +- if (locale == "en") +- return "en-US"; +- +- return locale.toStdString(); ++ std::string resolvedLocale; ++ if (l10n_util::CheckAndResolveLocale(locale.toStdString(), &resolvedLocale)) ++ return resolvedLocale; + } +- +- return parsedCommandLine->GetSwitchValueASCII(switches::kLang); ++ return "en-US"; + } + + #if defined(OS_WIN) +diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp +index 021986381..bf2c28ae6 100644 +--- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp ++++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp +@@ -123,6 +123,7 @@ private Q_SLOTS: + void doNotBreakLayout(); + + void changeLocale(); ++ void mixLangLocale(); + void inputMethodsTextFormat_data(); + void inputMethodsTextFormat(); + void keyboardEvents(); +@@ -1210,6 +1211,29 @@ void tst_QWebEngineView::changeLocale() + QCOMPARE(errorLines.first().toUtf8(), QByteArrayLiteral("Die Website ist nicht erreichbar")); + } + ++void tst_QWebEngineView::mixLangLocale() ++{ ++ for (QString locale : { "en_DK", "de_CH", "eu_ES" }) { ++ QLocale::setDefault(locale); ++ QWebEngineView view; ++ QSignalSpy loadSpy(&view, &QWebEngineView::loadFinished); ++ ++ bool terminated = false; ++ auto sc = connect(view.page(), &QWebEnginePage::renderProcessTerminated, [&] () { terminated = true; }); ++ ++ view.load(QUrl("qrc:///resources/dummy.html")); ++ QTRY_VERIFY(terminated || loadSpy.count() == 1); ++ ++ QVERIFY2(!terminated, ++ qPrintable(QString("Locale [%1] terminated: %2, loaded: %3").arg(locale).arg(terminated).arg(loadSpy.count()))); ++ QVERIFY(loadSpy.first().first().toBool()); ++ ++ QString content = toPlainTextSync(view.page()); ++ QVERIFY2(!content.isEmpty() && content.contains("test content"), qPrintable(content)); ++ } ++ QLocale::setDefault(QLocale("en")); ++} ++ + void tst_QWebEngineView::inputMethodsTextFormat_data() + { + QTest::addColumn<QString>("string"); +-- +cgit v1.2.1 + diff --git a/dev-qt/qtwebengine/qtwebengine-5.15.2_p20210224.ebuild b/dev-qt/qtwebengine/qtwebengine-5.15.2_p20210224.ebuild index 2c33bc250e6e..bd9662af8766 100644 --- a/dev-qt/qtwebengine/qtwebengine-5.15.2_p20210224.ebuild +++ b/dev-qt/qtwebengine/qtwebengine-5.15.2_p20210224.ebuild @@ -89,7 +89,8 @@ DEPEND="${RDEPEND} PATCHES=( "${FILESDIR}/${PN}-5.15.0-disable-fatal-warnings.patch" # bug 695446 - "${FILESDIR}/${P}-chromium-87-v8-icu68.patch" # bug 757606 + "${FILESDIR}/${P}-fix-crash-w-app-locales.patch" # bug 773919, QTBUG-91715 + "${FILESDIR}/${P}-chromium-87-v8-icu68.patch" # downstream, bug 757606 "${FILESDIR}/${P}-disable-git.patch" # downstream snapshot fix ) |