summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Sturmlechner <asturm@gentoo.org>2021-03-12 18:08:45 +0100
committerAndreas Sturmlechner <asturm@gentoo.org>2021-03-12 21:06:39 +0100
commit286732e1677d672669f19607f1db62780c62d746 (patch)
treea1fe7f573b4817cea03304ba897545e804391bfb /dev-qt/qtwebengine
parentdev-ruby/rspec-mocks: stable 3.9.1 for ppc64 (diff)
downloadgentoo-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.patch135
-rw-r--r--dev-qt/qtwebengine/qtwebengine-5.15.2_p20210224.ebuild3
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
)