commit:     c40cc87ed9378492d84a2c6c5e45fa3d399ba7a2
Author:     Jory Pratt <anarchy <AT> gentoo <DOT> org>
AuthorDate: Mon Dec  9 23:51:50 2019 +0000
Commit:     Jory Pratt <anarchy <AT> gentoo <DOT> org>
CommitDate: Mon Dec  9 23:52:11 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c40cc87e

www-client/firefox: Fix segfault with gcc lto builds

Closes: https://bugs.gentoo.org/show_bug.cgi?id=701866
Package-Manager: Portage-2.3.81, Repoman-2.3.20
Signed-off-by: Jory Pratt <anarchy <AT> gentoo.org>

 .../files/mozilla-bug1601707-gcc-fixup.patch       | 114 +++++++++++++++++++++
 www-client/firefox/firefox-71.0.ebuild             |   1 +
 2 files changed, 115 insertions(+)

diff --git a/www-client/firefox/files/mozilla-bug1601707-gcc-fixup.patch 
b/www-client/firefox/files/mozilla-bug1601707-gcc-fixup.patch
new file mode 100644
index 00000000000..7002c6d70b7
--- /dev/null
+++ b/www-client/firefox/files/mozilla-bug1601707-gcc-fixup.patch
@@ -0,0 +1,114 @@
+diff -up firefox-71.0/dom/indexedDB/ActorsParent.cpp.gcc-workaround 
firefox-71.0/dom/indexedDB/ActorsParent.cpp
+--- firefox-71.0/dom/indexedDB/ActorsParent.cpp.gcc-workaround 2019-12-02 
13:22:58.000000000 +0100
++++ firefox-71.0/dom/indexedDB/ActorsParent.cpp        2019-12-08 
21:52:54.449199120 +0100
+@@ -24311,11 +24311,11 @@ nsresult ObjectStoreAddOrPutRequestOp::D
+   // if we allow overwrite or not. By not allowing overwrite we raise
+   // detectable errors rather than corrupting data.
+   DatabaseConnection::CachedStatement stmt;
+-  const auto& optReplaceDirective = (!mOverwrite || keyUnset)
+-                                        ? NS_LITERAL_CSTRING("")
+-                                        : NS_LITERAL_CSTRING("OR REPLACE ");
+   rv = aConnection->GetCachedStatement(
+-      NS_LITERAL_CSTRING("INSERT ") + optReplaceDirective +
++      NS_LITERAL_CSTRING("INSERT ") +
++        ((!mOverwrite || keyUnset)
++           ? NS_LITERAL_CSTRING("")
++           : NS_LITERAL_CSTRING("OR REPLACE ")) +
+           NS_LITERAL_CSTRING("INTO object_data "
+                              "(object_store_id, key, file_ids, data) "
+                              "VALUES (:") +
+@@ -25869,11 +25869,8 @@ void Cursor::OpenOp::PrepareIndexKeyCond
+     }
+   }
+ 
+-  const auto& comparisonChar =
+-      isIncreasingOrder ? NS_LITERAL_CSTRING(">") : NS_LITERAL_CSTRING("<");
+-
+   mCursor->mContinueToQuery =
+-      aQueryStart + NS_LITERAL_CSTRING(" AND sort_column ") + comparisonChar +
++      aQueryStart + NS_LITERAL_CSTRING(" AND sort_column ") + 
(isIncreasingOrder ? NS_LITERAL_CSTRING(">") : NS_LITERAL_CSTRING("<")) +
+       NS_LITERAL_CSTRING("= :") + kStmtParamNameCurrentKey;
+ 
+   switch (mCursor->mDirection) {
+@@ -25881,11 +25878,11 @@ void Cursor::OpenOp::PrepareIndexKeyCond
+     case IDBCursor::PREV:
+       mCursor->mContinueQuery =
+           aQueryStart + NS_LITERAL_CSTRING(" AND sort_column ") +
+-          comparisonChar + NS_LITERAL_CSTRING("= :") +
++          (isIncreasingOrder ? NS_LITERAL_CSTRING(">") : 
NS_LITERAL_CSTRING("<")) + NS_LITERAL_CSTRING("= :") +
+           kStmtParamNameCurrentKey + NS_LITERAL_CSTRING(" AND ( sort_column 
") +
+-          comparisonChar + NS_LITERAL_CSTRING(" :") + 
kStmtParamNameCurrentKey +
++          (isIncreasingOrder ? NS_LITERAL_CSTRING(">") : 
NS_LITERAL_CSTRING("<")) + NS_LITERAL_CSTRING(" :") + kStmtParamNameCurrentKey +
+           NS_LITERAL_CSTRING(" OR ") + aObjectDataKeyPrefix +
+-          NS_LITERAL_CSTRING("object_data_key ") + comparisonChar +
++          NS_LITERAL_CSTRING("object_data_key ") + (isIncreasingOrder ? 
NS_LITERAL_CSTRING(">") : NS_LITERAL_CSTRING("<")) +
+           NS_LITERAL_CSTRING(" :") + kStmtParamNameObjectStorePosition +
+           NS_LITERAL_CSTRING(" ) ");
+ 
+@@ -25896,12 +25893,12 @@ void Cursor::OpenOp::PrepareIndexKeyCond
+               "(sort_column == :") +
+           kStmtParamNameCurrentKey + NS_LITERAL_CSTRING(" AND ") +
+           aObjectDataKeyPrefix + NS_LITERAL_CSTRING("object_data_key ") +
+-          comparisonChar + NS_LITERAL_CSTRING("= :") +
++          (isIncreasingOrder ? NS_LITERAL_CSTRING(">") : 
NS_LITERAL_CSTRING("<")) + NS_LITERAL_CSTRING("= :") +
+           kStmtParamNameObjectStorePosition +
+           NS_LITERAL_CSTRING(
+               ") OR "
+               "sort_column ") +
+-          comparisonChar + NS_LITERAL_CSTRING(" :") + 
kStmtParamNameCurrentKey +
++          (isIncreasingOrder ? NS_LITERAL_CSTRING(">") : 
NS_LITERAL_CSTRING("<")) + NS_LITERAL_CSTRING(" :") + kStmtParamNameCurrentKey +
+           NS_LITERAL_CSTRING(")");
+       break;
+ 
+@@ -25909,7 +25906,7 @@ void Cursor::OpenOp::PrepareIndexKeyCond
+     case IDBCursor::PREV_UNIQUE:
+       mCursor->mContinueQuery =
+           aQueryStart + NS_LITERAL_CSTRING(" AND sort_column ") +
+-          comparisonChar + NS_LITERAL_CSTRING(" :") + 
kStmtParamNameCurrentKey;
++          (isIncreasingOrder ? NS_LITERAL_CSTRING(">") : 
NS_LITERAL_CSTRING("<")) + NS_LITERAL_CSTRING(" :") + kStmtParamNameCurrentKey;
+       break;
+ 
+     default:
+@@ -26076,9 +26073,6 @@ nsresult Cursor::OpenOp::DoIndexDatabase
+ 
+   const bool usingKeyRange = mOptionalKeyRange.isSome();
+ 
+-  const auto& indexTable = mCursor->mUniqueIndex
+-                               ? NS_LITERAL_CSTRING("unique_index_data")
+-                               : NS_LITERAL_CSTRING("index_data");
+ 
+   NS_NAMED_LITERAL_CSTRING(sortColumn, "sort_column");
+ 
+@@ -26099,7 +26093,9 @@ nsresult Cursor::OpenOp::DoIndexDatabase
+                                  "object_data.file_ids, "
+                                  "object_data.data "
+                                  "FROM ") +
+-                             indexTable +
++                             (mCursor->mUniqueIndex
++                                 ? NS_LITERAL_CSTRING("unique_index_data")
++                                 : NS_LITERAL_CSTRING("index_data")) +
+                              NS_LITERAL_CSTRING(
+                                  " AS index_table "
+                                  "JOIN object_data "
+@@ -26198,9 +26194,6 @@ nsresult Cursor::OpenOp::DoIndexKeyDatab
+ 
+   const bool usingKeyRange = mOptionalKeyRange.isSome();
+ 
+-  const auto& table = mCursor->mUniqueIndex
+-                          ? NS_LITERAL_CSTRING("unique_index_data")
+-                          : NS_LITERAL_CSTRING("index_data");
+ 
+   NS_NAMED_LITERAL_CSTRING(sortColumn, "sort_column");
+ 
+@@ -26218,7 +26211,10 @@ nsresult Cursor::OpenOp::DoIndexKeyDatab
+                              NS_LITERAL_CSTRING(
+                                  "object_data_key "
+                                  " FROM ") +
+-                             table + NS_LITERAL_CSTRING(" WHERE index_id = 
:") +
++                             (mCursor->mUniqueIndex
++                                 ? NS_LITERAL_CSTRING("unique_index_data")
++                                 : NS_LITERAL_CSTRING("index_data")) +
++                             NS_LITERAL_CSTRING(" WHERE index_id = :") +
+                              kStmtParamNameId;
+ 
+   const auto keyRangeClause =

diff --git a/www-client/firefox/firefox-71.0.ebuild 
b/www-client/firefox/firefox-71.0.ebuild
index 889b6dec68a..431c1e1f9d7 100644
--- a/www-client/firefox/firefox-71.0.ebuild
+++ b/www-client/firefox/firefox-71.0.ebuild
@@ -270,6 +270,7 @@ src_prepare() {
        use !wayland && rm -f "${WORKDIR}/firefox/2019_mozilla-bug1539471.patch"
        eapply "${WORKDIR}/firefox"
        eapply "${FILESDIR}/${PN}-69.0-lto-gcc-fix.patch"
+       eapply "${FILESDIR}/mozilla-bug1601707-gcc-fixup.patch"
 
        # Allow user to apply any additional patches without modifing ebuild
        eapply_user

Reply via email to