summaryrefslogtreecommitdiff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
authorLeo Famulari <leo@famulari.name>2018-03-06 13:39:12 -0500
committerLeo Famulari <leo@famulari.name>2018-03-06 13:39:12 -0500
commit613ef763a52d7825f062eb7b58354504b64d2869 (patch)
treebee086914ed97aab1eaba25c325268e33e57c358 /gnu/packages/patches
parent86990eeda2a85acd3640059c0b681f1eddbacba0 (diff)
parent8a325748fb8c3709beb2c26966a3e3c86831f95e (diff)
Merge branch 'master' into staging
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/antlr3-3_1-fix-java8-compilation.patch35
-rw-r--r--gnu/packages/patches/antlr3-3_3-fix-java8-compilation.patch35
-rw-r--r--gnu/packages/patches/ceph-disable-cpu-optimizations.patch64
-rw-r--r--gnu/packages/patches/ceph-disable-unittest-throttle.patch52
-rw-r--r--gnu/packages/patches/ceph-rocksdb-compat.patch63
-rw-r--r--gnu/packages/patches/gd-CVE-2018-5711.patch61
-rw-r--r--gnu/packages/patches/glibc-allow-kernel-2.6.32.patch39
-rw-r--r--gnu/packages/patches/icecat-bug-1348660-pt5.patch727
-rw-r--r--gnu/packages/patches/icecat-bug-1414945.patch73
-rw-r--r--gnu/packages/patches/icecat-bug-1415133.patch40
-rw-r--r--gnu/packages/patches/icecat-bug-1424373-pt2.patch183
11 files changed, 260 insertions, 1112 deletions
diff --git a/gnu/packages/patches/antlr3-3_1-fix-java8-compilation.patch b/gnu/packages/patches/antlr3-3_1-fix-java8-compilation.patch
new file mode 100644
index 0000000000..0c4deb024b
--- /dev/null
+++ b/gnu/packages/patches/antlr3-3_1-fix-java8-compilation.patch
@@ -0,0 +1,35 @@
+Based on the upstream fix for the java8 compilation issue.
+Simplified patch.
+Upstream version of patch does not work with this source tree.
+
+The issue is that in java8 it is an error to pass null to
+removeAll. Results in null pointer exception. java7
+behaviour was to return the list unmodified.
+
+From db2a350c6d90efaa8dde949fa76005c2c5af45c4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?G=C3=A1bor=20Boskovits?= <boskovits@gmail.com>
+Date: Fri, 5 Jan 2018 17:05:31 +0100
+Subject: [PATCH] Fix java8 compilation.
+
+---
+ src/org/antlr/tool/CompositeGrammar.java | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/org/antlr/tool/CompositeGrammar.java b/src/org/antlr/tool/CompositeGrammar.java
+index f1408e7..7e02431 100644
+--- a/src/org/antlr/tool/CompositeGrammar.java
++++ b/src/org/antlr/tool/CompositeGrammar.java
+@@ -218,7 +218,9 @@ public class CompositeGrammar {
+ public List<Grammar> getIndirectDelegates(Grammar g) {
+ List<Grammar> direct = getDirectDelegates(g);
+ List<Grammar> delegates = getDelegates(g);
+- delegates.removeAll(direct);
++ if (direct != null) {
++ delegates.removeAll(direct);
++ }
+ return delegates;
+ }
+
+--
+2.15.1
+
diff --git a/gnu/packages/patches/antlr3-3_3-fix-java8-compilation.patch b/gnu/packages/patches/antlr3-3_3-fix-java8-compilation.patch
new file mode 100644
index 0000000000..a7d6be9b6b
--- /dev/null
+++ b/gnu/packages/patches/antlr3-3_3-fix-java8-compilation.patch
@@ -0,0 +1,35 @@
+Based on the upstream fix for the java8 compilation issue.
+Simplified patch.
+Upstream version of patch does not work with this source tree.
+
+The issue is that in java8 it is an error to pass null to
+removeAll. Results in null pointer exception. java7
+behaviour was to return the list unmodified.
+
+From 43867d50c05d1c06ab7220eb974a8874ae10c308 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?G=C3=A1bor=20Boskovits?= <boskovits@gmail.com>
+Date: Fri, 5 Jan 2018 19:08:24 +0100
+Subject: [PATCH] Fix java8 complilation error.
+
+---
+ tool/src/main/java/org/antlr/tool/CompositeGrammar.java | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/tool/src/main/java/org/antlr/tool/CompositeGrammar.java b/tool/src/main/java/org/antlr/tool/CompositeGrammar.java
+index f34ea73..63740a6 100644
+--- a/tool/src/main/java/org/antlr/tool/CompositeGrammar.java
++++ b/tool/src/main/java/org/antlr/tool/CompositeGrammar.java
+@@ -226,7 +226,9 @@ public class CompositeGrammar {
+ public List<Grammar> getIndirectDelegates(Grammar g) {
+ List<Grammar> direct = getDirectDelegates(g);
+ List<Grammar> delegates = getDelegates(g);
+- delegates.removeAll(direct);
++ if(direct != null) {
++ delegates.removeAll(direct);
++ }
+ return delegates;
+ }
+
+--
+2.15.1
+
diff --git a/gnu/packages/patches/ceph-disable-cpu-optimizations.patch b/gnu/packages/patches/ceph-disable-cpu-optimizations.patch
index f33eb629d6..421b1d4fe1 100644
--- a/gnu/packages/patches/ceph-disable-cpu-optimizations.patch
+++ b/gnu/packages/patches/ceph-disable-cpu-optimizations.patch
@@ -1,5 +1,4 @@
-Disable CPU optimizations not supported by all x86_64 systems. Also
-don't add anything for i686.
+Disable CPU optimizations not supported by all x86_64 systems.
--- a/cmake/modules/SIMDExt.cmake 2017-03-23 22:22:58.254071694 +0100
+++ b/cmake/modules/SIMDExt.cmake 2017-03-23 22:23:22.446848845 +0100
@@ -15,39 +14,30 @@ don't add anything for i686.
#
# SIMD_COMPILE_FLAGS
#
-@@ -73,7 +68,7 @@
- set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -mfpu=neon")
- endif()
-
--elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|amd64|x86_64|AMD64")
-+elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64")
- set(HAVE_INTEL 1)
- CHECK_C_COMPILER_FLAG(-msse HAVE_INTEL_SSE)
- if(HAVE_INTEL_SSE)
-@@ -83,26 +78,6 @@
- if(HAVE_INTEL_SSE2)
- set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse2")
- endif()
-- CHECK_C_COMPILER_FLAG(-msse3 HAVE_INTEL_SSE3)
-- if(HAVE_INTEL_SSE3)
-- set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse3")
-- endif()
-- CHECK_C_COMPILER_FLAG(-mssse3 HAVE_INTEL_SSSE3)
-- if(HAVE_INTEL_SSSE3)
-- set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -mssse3")
-- endif()
-- CHECK_C_COMPILER_FLAG(-mpclmul HAVE_INTEL_PCLMUL)
-- if(HAVE_INTEL_PCLMUL)
-- set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -mpclmul")
-- endif()
-- CHECK_C_COMPILER_FLAG(-msse4.1 HAVE_INTEL_SSE4_1)
-- if(HAVE_INTEL_SSE4_1)
-- set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse4.1")
-- endif()
-- CHECK_C_COMPILER_FLAG(-msse4.2 HAVE_INTEL_SSE4_2)
-- if(HAVE_INTEL_SSE4_2)
-- set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse4.2")
-- endif()
+@@ -85,26 +80,6 @@
+ if(HAVE_INTEL_SSE2)
+ set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse2")
+ endif()
+- CHECK_C_COMPILER_FLAG(-msse3 HAVE_INTEL_SSE3)
+- if(HAVE_INTEL_SSE3)
+- set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse3")
+- endif()
+- CHECK_C_COMPILER_FLAG(-mssse3 HAVE_INTEL_SSSE3)
+- if(HAVE_INTEL_SSSE3)
+- set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -mssse3")
+- endif()
+- CHECK_C_COMPILER_FLAG(-mpclmul HAVE_INTEL_PCLMUL)
+- if(HAVE_INTEL_PCLMUL)
+- set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -mpclmul")
+- endif()
+- CHECK_C_COMPILER_FLAG(-msse4.1 HAVE_INTEL_SSE4_1)
+- if(HAVE_INTEL_SSE4_1)
+- set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse4.1")
+- endif()
+- CHECK_C_COMPILER_FLAG(-msse4.2 HAVE_INTEL_SSE4_2)
+- if(HAVE_INTEL_SSE4_2)
+- set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse4.2")
+- endif()
+ endif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64")
+ endif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686|amd64|x86_64|AMD64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(powerpc|ppc)64le")
- set(HAVE_PPC64LE 1)
- message(STATUS " we are ppc64le")
diff --git a/gnu/packages/patches/ceph-disable-unittest-throttle.patch b/gnu/packages/patches/ceph-disable-unittest-throttle.patch
deleted file mode 100644
index 08ae5f9e24..0000000000
--- a/gnu/packages/patches/ceph-disable-unittest-throttle.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-FIXME: This test broke after the gcc-5/glibc-2.25 core-updates merge.
-Not sure what's going on here, it hangs after spawning the first thread.
-
-diff --git a/src/test/common/Throttle.cc b/src/test/common/Throttle.cc
-index 5b6d73217d..40a477b2a3 100644
---- a/src/test/common/Throttle.cc
-+++ b/src/test/common/Throttle.cc
-@@ -216,44 +216,6 @@ TEST_F(ThrottleTest, wait) {
- } while(!waited);
- }
-
--TEST_F(ThrottleTest, destructor) {
-- Thread_get *t;
-- {
-- int64_t throttle_max = 10;
-- Throttle *throttle = new Throttle(g_ceph_context, "throttle", throttle_max);
--
-- ASSERT_FALSE(throttle->get(5));
--
-- t = new Thread_get(*throttle, 7);
-- t->create("t_throttle");
-- bool blocked;
-- useconds_t delay = 1;
-- do {
-- usleep(delay);
-- if (throttle->get_or_fail(1)) {
-- throttle->put(1);
-- blocked = false;
-- } else {
-- blocked = true;
-- }
-- delay *= 2;
-- } while(!blocked);
-- delete throttle;
-- }
--
-- { //
-- // The thread is left hanging, otherwise it will abort().
-- // Deleting the Throttle on which it is waiting creates a
-- // inconsistency that will be detected: the Throttle object that
-- // it references no longer exists.
-- //
-- pthread_t id = t->get_thread_id();
-- ASSERT_EQ(pthread_kill(id, 0), 0);
-- delete t;
-- ASSERT_EQ(pthread_kill(id, 0), 0);
-- }
--}
--
- std::pair<double, std::chrono::duration<double> > test_backoff(
- double low_threshhold,
- double high_threshhold,
diff --git a/gnu/packages/patches/ceph-rocksdb-compat.patch b/gnu/packages/patches/ceph-rocksdb-compat.patch
new file mode 100644
index 0000000000..1a3c6b0b23
--- /dev/null
+++ b/gnu/packages/patches/ceph-rocksdb-compat.patch
@@ -0,0 +1,63 @@
+Fix compatibility with newer versions of RocksDB.
+
+Adapted from this upstream patch, with some additional changes for 12.2:
+https://github.com/ceph/ceph/commit/9d73a7121fdb1ae87cb1aa6f7d9d7a13f329ae68
+
+diff --git a/src/kv/RocksDBStore.cc b/src/kv/RocksDBStore.cc
+index 8660afe1886d..bc0de79e23cb 100644
+--- a/src/kv/RocksDBStore.cc
++++ b/src/kv/RocksDBStore.cc
+@@ -505,7 +505,7 @@
+ // considering performance overhead, default is disabled
+ if (g_conf->rocksdb_perf) {
+ rocksdb::SetPerfLevel(rocksdb::PerfLevel::kEnableTimeExceptForMutex);
+- rocksdb::perf_context.Reset();
++ rocksdb::get_perf_context()->Reset();
+ }
+
+ RocksDBTransactionImpl * _t =
+@@ -532,13 +532,13 @@
+ utime_t write_wal_time;
+ utime_t write_pre_and_post_process_time;
+ write_wal_time.set_from_double(
+- static_cast<double>(rocksdb::perf_context.write_wal_time)/1000000000);
++ static_cast<double>(rocksdb::get_perf_context()->write_wal_time)/1000000000);
+ write_memtable_time.set_from_double(
+- static_cast<double>(rocksdb::perf_context.write_memtable_time)/1000000000);
++ static_cast<double>(rocksdb::get_perf_context()->write_memtable_time)/1000000000);
+ write_delay_time.set_from_double(
+- static_cast<double>(rocksdb::perf_context.write_delay_time)/1000000000);
++ static_cast<double>(rocksdb::get_perf_context()->write_delay_time)/1000000000);
+ write_pre_and_post_process_time.set_from_double(
+- static_cast<double>(rocksdb::perf_context.write_pre_and_post_process_time)/1000000000);
++ static_cast<double>(rocksdb::get_perf_context()->write_pre_and_post_process_time)/1000000000);
+ logger->tinc(l_rocksdb_write_memtable_time, write_memtable_time);
+ logger->tinc(l_rocksdb_write_delay_time, write_delay_time);
+ logger->tinc(l_rocksdb_write_wal_time, write_wal_time);
+@@ -558,7 +558,7 @@
+ // considering performance overhead, default is disabled
+ if (g_conf->rocksdb_perf) {
+ rocksdb::SetPerfLevel(rocksdb::PerfLevel::kEnableTimeExceptForMutex);
+- rocksdb::perf_context.Reset();
++ rocksdb::get_perf_context()->Reset();
+ }
+
+ RocksDBTransactionImpl * _t =
+@@ -586,13 +586,13 @@
+ utime_t write_wal_time;
+ utime_t write_pre_and_post_process_time;
+ write_wal_time.set_from_double(
+- static_cast<double>(rocksdb::perf_context.write_wal_time)/1000000000);
++ static_cast<double>(rocksdb::get_perf_context()->write_wal_time)/1000000000);
+ write_memtable_time.set_from_double(
+- static_cast<double>(rocksdb::perf_context.write_memtable_time)/1000000000);
++ static_cast<double>(rocksdb::get_perf_context()->write_memtable_time)/1000000000);
+ write_delay_time.set_from_double(
+- static_cast<double>(rocksdb::perf_context.write_delay_time)/1000000000);
++ static_cast<double>(rocksdb::get_perf_context()->write_delay_time)/1000000000);
+ write_pre_and_post_process_time.set_from_double(
+- static_cast<double>(rocksdb::perf_context.write_pre_and_post_process_time)/1000000000);
++ static_cast<double>(rocksdb::get_perf_context()->write_pre_and_post_process_time)/1000000000);
+ logger->tinc(l_rocksdb_write_memtable_time, write_memtable_time);
+ logger->tinc(l_rocksdb_write_delay_time, write_delay_time);
+ logger->tinc(l_rocksdb_write_wal_time, write_wal_time);
diff --git a/gnu/packages/patches/gd-CVE-2018-5711.patch b/gnu/packages/patches/gd-CVE-2018-5711.patch
new file mode 100644
index 0000000000..83b12cde63
--- /dev/null
+++ b/gnu/packages/patches/gd-CVE-2018-5711.patch
@@ -0,0 +1,61 @@
+This patch is adapted from commit a11f47475e6443b7f32d21f2271f28f417e2ac04 and
+fixes CVE-2018-5711.
+
+From a11f47475e6443b7f32d21f2271f28f417e2ac04 Mon Sep 17 00:00:00 2001
+From: "Christoph M. Becker" <cmbecker69@gmx.de>
+Date: Wed, 29 Nov 2017 19:37:38 +0100
+Subject: [PATCH] Fix #420: Potential infinite loop in gdImageCreateFromGifCtx
+
+Due to a signedness confusion in `GetCode_` a corrupt GIF file can
+trigger an infinite loop. Furthermore we make sure that a GIF without
+any palette entries is treated as invalid *after* open palette entries
+have been removed.
+
+CVE-2018-5711
+
+See also https://bugs.php.net/bug.php?id=75571.
+---
+ src/gd_gif_in.c | 12 ++++++------
+ 1 file changed, 38 insertions(+), 6 deletions(-)
+
+diff --git a/src/gd_gif_in.c b/src/gd_gif_in.c
+index daf26e7..0a8bd71 100644
+--- a/src/gd_gif_in.c
++++ b/src/gd_gif_in.c
+@@ -335,11 +335,6 @@ terminated:
+ return 0;
+ }
+
+- if(!im->colorsTotal) {
+- gdImageDestroy(im);
+- return 0;
+- }
+-
+ /* Check for open colors at the end, so
+ * we can reduce colorsTotal and ultimately
+ * BitsPerPixel */
+@@ -351,6 +346,11 @@ terminated:
+ }
+ }
+
++ if(!im->colorsTotal) {
++ gdImageDestroy(im);
++ return 0;
++ }
++
+ return im;
+ }
+
+@@ -447,7 +447,7 @@ static int
+ GetCode_(gdIOCtx *fd, CODE_STATIC_DATA *scd, int code_size, int flag, int *ZeroDataBlockP)
+ {
+ int i, j, ret;
+- unsigned char count;
++ int count;
+
+ if(flag) {
+ scd->curbit = 0;
+
+--
+2.13.6
+
diff --git a/gnu/packages/patches/glibc-allow-kernel-2.6.32.patch b/gnu/packages/patches/glibc-allow-kernel-2.6.32.patch
new file mode 100644
index 0000000000..ce18b874c4
--- /dev/null
+++ b/gnu/packages/patches/glibc-allow-kernel-2.6.32.patch
@@ -0,0 +1,39 @@
+diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure
+index cace758c01..38fe7fe0b0 100644
+--- a/sysdeps/unix/sysv/linux/configure
++++ b/sysdeps/unix/sysv/linux/configure
+@@ -69,7 +69,7 @@ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for kernel header at least $minimum_kernel" >&5
+ $as_echo_n "checking for kernel header at least $minimum_kernel... " >&6; }
+ decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
+-abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
++abinum=`echo "2.6.32.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+ #include <linux/version.h>
+diff --git a/sysdeps/unix/sysv/linux/configure.ac b/sysdeps/unix/sysv/linux/configure.ac
+index 13abda0a51..6abc12eaed 100644
+--- a/sysdeps/unix/sysv/linux/configure.ac
++++ b/sysdeps/unix/sysv/linux/configure.ac
+@@ -50,7 +50,7 @@ fi
+ AC_MSG_CHECKING(for kernel header at least $minimum_kernel)
+ changequote(,)dnl
+ decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
+-abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
++abinum=`echo "2.6.32.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
+ changequote([,])dnl
+ AC_TRY_COMPILE([#include <linux/version.h>
+ #if LINUX_VERSION_CODE < $decnum
+diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h
+index 823cd8224d..482caaeeec 100644
+--- a/sysdeps/unix/sysv/linux/dl-osinfo.h
++++ b/sysdeps/unix/sysv/linux/dl-osinfo.h
+@@ -39,7 +39,7 @@
+ GLRO(dl_osversion) = version; \
+ \
+ /* Now we can test with the required version. */ \
+- if (__LINUX_KERNEL_VERSION > 0 && version < __LINUX_KERNEL_VERSION) \
++ if (__LINUX_KERNEL_VERSION > 0 && version < __LINUX_KERNEL_VERSION && version != 0x020620) \
+ /* Not sufficent. */ \
+ FATAL ("FATAL: kernel too old\n"); \
+ } \
diff --git a/gnu/packages/patches/icecat-bug-1348660-pt5.patch b/gnu/packages/patches/icecat-bug-1348660-pt5.patch
deleted file mode 100644
index b0bede3b38..0000000000
--- a/gnu/packages/patches/icecat-bug-1348660-pt5.patch
+++ /dev/null
@@ -1,727 +0,0 @@
-This is a subset of the following changeset from upstream:
- https://hg.mozilla.org/releases/mozilla-esr52/raw-rev/5e07bd37ac61
-
-This excludes all test code from that changeset, including a GIT binary patch
-that is not supported by Guix's patch-and-repack mechanism.
-
-# HG changeset patch
-# User Jan Varga <jan.varga@gmail.com>
-# Date 1490181244 -3600
-# Node ID 5e07bd37ac6162f218dfe03ed83b5dcca9653b68
-# Parent 28934912eede9e14895baf4af7575ca9639f59ee
-Bug 1348660 - Part 5: Implement a method to retrieve usage data for all origins at once. r=btseng, a=lizzard
-
-diff --git a/dom/quota/ActorsChild.cpp b/dom/quota/ActorsChild.cpp
---- a/dom/quota/ActorsChild.cpp
-+++ b/dom/quota/ActorsChild.cpp
-@@ -137,16 +137,52 @@ QuotaUsageRequestChild::HandleResponse(n
- AssertIsOnOwningThread();
- MOZ_ASSERT(NS_FAILED(aResponse));
- MOZ_ASSERT(mRequest);
-
- mRequest->SetError(aResponse);
- }
-
- void
-+QuotaUsageRequestChild::HandleResponse(const nsTArray<OriginUsage>& aResponse)
-+{
-+ AssertIsOnOwningThread();
-+ MOZ_ASSERT(mRequest);
-+
-+ RefPtr<nsVariant> variant = new nsVariant();
-+
-+ if (aResponse.IsEmpty()) {
-+ variant->SetAsEmptyArray();
-+ } else {
-+ nsTArray<RefPtr<UsageResult>> usageResults;
-+
-+ const uint32_t count = aResponse.Length();
-+
-+ usageResults.SetCapacity(count);
-+
-+ for (uint32_t index = 0; index < count; index++) {
-+ auto& originUsage = aResponse[index];
-+
-+ RefPtr<UsageResult> usageResult = new UsageResult(originUsage.origin(),
-+ originUsage.persisted(),
-+ originUsage.usage());
-+
-+ usageResults.AppendElement(usageResult.forget());
-+ }
-+
-+ variant->SetAsArray(nsIDataType::VTYPE_INTERFACE_IS,
-+ &NS_GET_IID(nsIQuotaUsageResult),
-+ usageResults.Length(),
-+ static_cast<void*>(usageResults.Elements()));
-+ }
-+
-+ mRequest->SetResult(variant);
-+}
-+
-+void
- QuotaUsageRequestChild::HandleResponse(const OriginUsageResponse& aResponse)
- {
- AssertIsOnOwningThread();
- MOZ_ASSERT(mRequest);
-
- RefPtr<OriginUsageResult> result =
- new OriginUsageResult(aResponse.usage(),
- aResponse.fileUsage(),
-@@ -177,16 +213,20 @@ QuotaUsageRequestChild::Recv__delete__(c
- AssertIsOnOwningThread();
- MOZ_ASSERT(mRequest);
-
- switch (aResponse.type()) {
- case UsageRequestResponse::Tnsresult:
- HandleResponse(aResponse.get_nsresult());
- break;
-
-+ case UsageRequestResponse::TAllUsageResponse:
-+ HandleResponse(aResponse.get_AllUsageResponse().originUsages());
-+ break;
-+
- case UsageRequestResponse::TOriginUsageResponse:
- HandleResponse(aResponse.get_OriginUsageResponse());
- break;
-
- default:
- MOZ_CRASH("Unknown response type!");
- }
-
-diff --git a/dom/quota/ActorsChild.h b/dom/quota/ActorsChild.h
---- a/dom/quota/ActorsChild.h
-+++ b/dom/quota/ActorsChild.h
-@@ -93,16 +93,19 @@ private:
-
- // Only destroyed by QuotaChild.
- ~QuotaUsageRequestChild();
-
- void
- HandleResponse(nsresult aResponse);
-
- void
-+ HandleResponse(const nsTArray<OriginUsage>& aResponse);
-+
-+ void
- HandleResponse(const OriginUsageResponse& aResponse);
-
- // IPDL methods are only called by IPDL.
- virtual void
- ActorDestroy(ActorDestroyReason aWhy) override;
-
- virtual bool
- Recv__delete__(const UsageRequestResponse& aResponse) override;
-diff --git a/dom/quota/ActorsParent.cpp b/dom/quota/ActorsParent.cpp
---- a/dom/quota/ActorsParent.cpp
-+++ b/dom/quota/ActorsParent.cpp
-@@ -1039,16 +1039,42 @@ private:
- // IPDL methods.
- void
- ActorDestroy(ActorDestroyReason aWhy) override;
-
- bool
- RecvCancel() override;
- };
-
-+class GetUsageOp final
-+ : public QuotaUsageRequestBase
-+{
-+ nsTArray<OriginUsage> mOriginUsages;
-+ nsDataHashtable<nsCStringHashKey, uint32_t> mOriginUsagesIndex;
-+
-+ bool mGetAll;
-+
-+public:
-+ explicit GetUsageOp(const UsageRequestParams& aParams);
-+
-+private:
-+ ~GetUsageOp()
-+ { }
-+
-+ nsresult
-+ TraverseRepository(QuotaManager* aQuotaManager,
-+ PersistenceType aPersistenceType);
-+
-+ nsresult
-+ DoDirectoryWork(QuotaManager* aQuotaManager) override;
-+
-+ void
-+ GetResponse(UsageRequestResponse& aResponse) override;
-+};
-+
- class GetOriginUsageOp final
- : public QuotaUsageRequestBase
- {
- // If mGetGroupUsage is false, we use mUsageInfo to record the origin usage
- // and the file usage. Otherwise, we use it to record the group usage and the
- // limit.
- UsageInfo mUsageInfo;
-
-@@ -5693,16 +5719,20 @@ PQuotaUsageRequestParent*
- Quota::AllocPQuotaUsageRequestParent(const UsageRequestParams& aParams)
- {
- AssertIsOnBackgroundThread();
- MOZ_ASSERT(aParams.type() != UsageRequestParams::T__None);
-
- RefPtr<QuotaUsageRequestBase> actor;
-
- switch (aParams.type()) {
-+ case UsageRequestParams::TAllUsageParams:
-+ actor = new GetUsageOp(aParams);
-+ break;
-+
- case UsageRequestParams::TOriginUsageParams:
- actor = new GetOriginUsageOp(aParams);
- break;
-
- default:
- MOZ_CRASH("Should never get here!");
- }
-
-@@ -6033,16 +6063,189 @@ QuotaUsageRequestBase::RecvCancel()
- if (mCanceled.exchange(true)) {
- NS_WARNING("Canceled more than once?!");
- return false;
- }
-
- return true;
- }
-
-+GetUsageOp::GetUsageOp(const UsageRequestParams& aParams)
-+ : mGetAll(aParams.get_AllUsageParams().getAll())
-+{
-+ AssertIsOnOwningThread();
-+ MOZ_ASSERT(aParams.type() == UsageRequestParams::TAllUsageParams);
-+}
-+
-+nsresult
-+GetUsageOp::TraverseRepository(QuotaManager* aQuotaManager,
-+ PersistenceType aPersistenceType)
-+{
-+ AssertIsOnIOThread();
-+ MOZ_ASSERT(aQuotaManager);
-+
-+ nsresult rv;
-+
-+ nsCOMPtr<nsIFile> directory =
-+ do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv);
-+ if (NS_WARN_IF(NS_FAILED(rv))) {
-+ return rv;
-+ }
-+
-+ rv = directory->InitWithPath(aQuotaManager->GetStoragePath(aPersistenceType));
-+ if (NS_WARN_IF(NS_FAILED(rv))) {
-+ return rv;
-+ }
-+
-+ bool exists;
-+ rv = directory->Exists(&exists);
-+ if (NS_WARN_IF(NS_FAILED(rv))) {
-+ return rv;
-+ }
-+
-+ if (!exists) {
-+ return NS_OK;
-+ }
-+
-+ nsCOMPtr<nsISimpleEnumerator> entries;
-+ rv = directory->GetDirectoryEntries(getter_AddRefs(entries));
-+ if (NS_WARN_IF(NS_FAILED(rv))) {
-+ return rv;
-+ }
-+
-+ bool persistent = aPersistenceType == PERSISTENCE_TYPE_PERSISTENT;
-+
-+ bool hasMore;
-+ while (NS_SUCCEEDED((rv = entries->HasMoreElements(&hasMore))) &&
-+ hasMore && !mCanceled) {
-+ nsCOMPtr<nsISupports> entry;
-+ rv = entries->GetNext(getter_AddRefs(entry));
-+ if (NS_WARN_IF(NS_FAILED(rv))) {
-+ return rv;
-+ }
-+
-+ nsCOMPtr<nsIFile> originDir = do_QueryInterface(entry);
-+ MOZ_ASSERT(originDir);
-+
-+ bool isDirectory;
-+ rv = originDir->IsDirectory(&isDirectory);
-+ if (NS_WARN_IF(NS_FAILED(rv))) {
-+ return rv;
-+ }
-+
-+ if (!isDirectory) {
-+ nsString leafName;
-+ rv = originDir->GetLeafName(leafName);
-+ if (NS_WARN_IF(NS_FAILED(rv))) {
-+ return rv;
-+ }
-+
-+ if (!leafName.EqualsLiteral(DSSTORE_FILE_NAME)) {
-+ QM_WARNING("Something (%s) in the repository that doesn't belong!",
-+ NS_ConvertUTF16toUTF8(leafName).get());
-+ }
-+ continue;
-+ }
-+
-+ int64_t timestamp;
-+ nsCString suffix;
-+ nsCString group;
-+ nsCString origin;
-+ bool isApp;
-+ rv = aQuotaManager->GetDirectoryMetadata2WithRestore(originDir,
-+ persistent,
-+ &timestamp,
-+ suffix,
-+ group,
-+ origin,
-+ &isApp);
-+ if (NS_WARN_IF(NS_FAILED(rv))) {
-+ return rv;
-+ }
-+
-+ if (!mGetAll &&
-+ aQuotaManager->IsOriginWhitelistedForPersistentStorage(origin)) {
-+ continue;
-+ }
-+
-+ OriginUsage* originUsage;
-+
-+ // We can't store pointers to OriginUsage objects in the hashtable
-+ // since AppendElement() reallocates its internal array buffer as number
-+ // of elements grows.
-+ uint32_t index;
-+ if (mOriginUsagesIndex.Get(origin, &index)) {
-+ originUsage = &mOriginUsages[index];
-+ } else {
-+ index = mOriginUsages.Length();
-+
-+ originUsage = mOriginUsages.AppendElement();
-+
-+ originUsage->origin() = origin;
-+ originUsage->persisted() = false;
-+ originUsage->usage() = 0;
-+
-+ mOriginUsagesIndex.Put(origin, index);
-+ }
-+
-+ UsageInfo usageInfo;
-+ rv = GetUsageForOrigin(aQuotaManager,
-+ aPersistenceType,
-+ group,
-+ origin,
-+ isApp,
-+ &usageInfo);
-+ if (NS_WARN_IF(NS_FAILED(rv))) {
-+ return rv;
-+ }
-+
-+ originUsage->usage() = originUsage->usage() + usageInfo.TotalUsage();
-+ }
-+ if (NS_WARN_IF(NS_FAILED(rv))) {
-+ return rv;
-+ }
-+
-+ return NS_OK;
-+}
-+
-+nsresult
-+GetUsageOp::DoDirectoryWork(QuotaManager* aQuotaManager)
-+{
-+ AssertIsOnIOThread();
-+
-+ PROFILER_LABEL("Quota", "GetUsageOp::DoDirectoryWork",
-+ js::ProfileEntry::Category::OTHER);
-+
-+ nsresult rv;
-+
-+ for (const PersistenceType type : kAllPersistenceTypes) {
-+ rv = TraverseRepository(aQuotaManager, type);
-+ if (NS_WARN_IF(NS_FAILED(rv))) {
-+ return rv;
-+ }
-+ }
-+
-+ return NS_OK;
-+}
-+
-+void
-+GetUsageOp::GetResponse(UsageRequestResponse& aResponse)
-+{
-+ AssertIsOnOwningThread();
-+
-+ aResponse = AllUsageResponse();
-+
-+ if (!mOriginUsages.IsEmpty()) {
-+ nsTArray<OriginUsage>& originUsages =
-+ aResponse.get_AllUsageResponse().originUsages();
-+
-+ mOriginUsages.SwapElements(originUsages);
-+ }
-+}
-+
- GetOriginUsageOp::GetOriginUsageOp(const UsageRequestParams& aParams)
- : mParams(aParams.get_OriginUsageParams())
- , mGetGroupUsage(aParams.get_OriginUsageParams().getGroupUsage())
- {
- AssertIsOnOwningThread();
- MOZ_ASSERT(aParams.type() == UsageRequestParams::TOriginUsageParams);
- }
-
-diff --git a/dom/quota/PQuota.ipdl b/dom/quota/PQuota.ipdl
---- a/dom/quota/PQuota.ipdl
-+++ b/dom/quota/PQuota.ipdl
-@@ -12,24 +12,30 @@ include "mozilla/dom/quota/Serialization
-
- using mozilla::dom::quota::PersistenceType
- from "mozilla/dom/quota/PersistenceType.h";
-
- namespace mozilla {
- namespace dom {
- namespace quota {
-
-+struct AllUsageParams
-+{
-+ bool getAll;
-+};
-+
- struct OriginUsageParams
- {
- PrincipalInfo principalInfo;
- bool getGroupUsage;
- };
-
- union UsageRequestParams
- {
-+ AllUsageParams;
- OriginUsageParams;
- };
-
- struct ClearOriginParams
- {
- PrincipalInfo principalInfo;
- PersistenceType persistenceType;
- bool persistenceTypeIsExplicit;
-diff --git a/dom/quota/PQuotaUsageRequest.ipdl b/dom/quota/PQuotaUsageRequest.ipdl
---- a/dom/quota/PQuotaUsageRequest.ipdl
-+++ b/dom/quota/PQuotaUsageRequest.ipdl
-@@ -3,26 +3,39 @@
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
- include protocol PQuota;
-
- namespace mozilla {
- namespace dom {
- namespace quota {
-
-+struct OriginUsage
-+{
-+ nsCString origin;
-+ bool persisted;
-+ uint64_t usage;
-+};
-+
-+struct AllUsageResponse
-+{
-+ OriginUsage[] originUsages;
-+};
-+
- struct OriginUsageResponse
- {
- uint64_t usage;
- uint64_t fileUsage;
- uint64_t limit;
- };
-
- union UsageRequestResponse
- {
- nsresult;
-+ AllUsageResponse;
- OriginUsageResponse;
- };
-
- protocol PQuotaUsageRequest
- {
- manager PQuota;
-
- parent:
-diff --git a/dom/quota/QuotaManagerService.cpp b/dom/quota/QuotaManagerService.cpp
---- a/dom/quota/QuotaManagerService.cpp
-+++ b/dom/quota/QuotaManagerService.cpp
-@@ -490,16 +490,41 @@ QuotaManagerService::RemoveIdleObserver(
-
- NS_IMPL_ADDREF(QuotaManagerService)
- NS_IMPL_RELEASE_WITH_DESTROY(QuotaManagerService, Destroy())
- NS_IMPL_QUERY_INTERFACE(QuotaManagerService,
- nsIQuotaManagerService,
- nsIObserver)
-
- NS_IMETHODIMP
-+QuotaManagerService::GetUsage(nsIQuotaUsageCallback* aCallback,
-+ bool aGetAll,
-+ nsIQuotaUsageRequest** _retval)
-+{
-+ MOZ_ASSERT(NS_IsMainThread());
-+ MOZ_ASSERT(aCallback);
-+
-+ RefPtr<UsageRequest> request = new UsageRequest(aCallback);
-+
-+ AllUsageParams params;
-+
-+ params.getAll() = aGetAll;
-+
-+ nsAutoPtr<PendingRequestInfo> info(new UsageRequestInfo(request, params));
-+
-+ nsresult rv = InitiateRequest(info);
-+ if (NS_WARN_IF(NS_FAILED(rv))) {
-+ return rv;
-+ }
-+
-+ request.forget(_retval);
-+ return NS_OK;
-+}
-+
-+NS_IMETHODIMP
- QuotaManagerService::GetUsageForPrincipal(nsIPrincipal* aPrincipal,
- nsIQuotaUsageCallback* aCallback,
- bool aGetGroupUsage,
- nsIQuotaUsageRequest** _retval)
- {
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(aPrincipal);
- MOZ_ASSERT(aCallback);
-diff --git a/dom/quota/QuotaRequests.cpp b/dom/quota/QuotaRequests.cpp
---- a/dom/quota/QuotaRequests.cpp
-+++ b/dom/quota/QuotaRequests.cpp
-@@ -86,16 +86,25 @@ RequestBase::GetResultCode(nsresult* aRe
- if (!mHaveResultOrErrorCode) {
- return NS_ERROR_FAILURE;
- }
-
- *aResultCode = mResultCode;
- return NS_OK;
- }
-
-+UsageRequest::UsageRequest(nsIQuotaUsageCallback* aCallback)
-+ : mCallback(aCallback)
-+ , mBackgroundActor(nullptr)
-+ , mCanceled(false)
-+{
-+ AssertIsOnOwningThread();
-+ MOZ_ASSERT(aCallback);
-+}
-+
- UsageRequest::UsageRequest(nsIPrincipal* aPrincipal,
- nsIQuotaUsageCallback* aCallback)
- : RequestBase(aPrincipal)
- , mCallback(aCallback)
- , mBackgroundActor(nullptr)
- , mCanceled(false)
- {
- AssertIsOnOwningThread();
-diff --git a/dom/quota/QuotaRequests.h b/dom/quota/QuotaRequests.h
---- a/dom/quota/QuotaRequests.h
-+++ b/dom/quota/QuotaRequests.h
-@@ -73,16 +73,18 @@ class UsageRequest final
-
- nsCOMPtr<nsIVariant> mResult;
-
- QuotaUsageRequestChild* mBackgroundActor;
-
- bool mCanceled;
-
- public:
-+ explicit UsageRequest(nsIQuotaUsageCallback* aCallback);
-+
- UsageRequest(nsIPrincipal* aPrincipal,
- nsIQuotaUsageCallback* aCallback);
-
- void
- SetBackgroundActor(QuotaUsageRequestChild* aBackgroundActor);
-
- void
- ClearBackgroundActor()
-diff --git a/dom/quota/QuotaResults.cpp b/dom/quota/QuotaResults.cpp
---- a/dom/quota/QuotaResults.cpp
-+++ b/dom/quota/QuotaResults.cpp
-@@ -5,16 +5,53 @@
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
- #include "QuotaResults.h"
-
- namespace mozilla {
- namespace dom {
- namespace quota {
-
-+UsageResult::UsageResult(const nsACString& aOrigin,
-+ bool aPersisted,
-+ uint64_t aUsage)
-+ : mOrigin(aOrigin)
-+ , mUsage(aUsage)
-+ , mPersisted(aPersisted)
-+{
-+}
-+
-+NS_IMPL_ISUPPORTS(UsageResult,
-+ nsIQuotaUsageResult)
-+
-+NS_IMETHODIMP
-+UsageResult::GetOrigin(nsACString& aOrigin)
-+{
-+ aOrigin = mOrigin;
-+ return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+UsageResult::GetPersisted(bool* aPersisted)
-+{
-+ MOZ_ASSERT(aPersisted);
-+
-+ *aPersisted = mPersisted;
-+ return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+UsageResult::GetUsage(uint64_t* aUsage)
-+{
-+ MOZ_ASSERT(aUsage);
-+
-+ *aUsage = mUsage;
-+ return NS_OK;
-+}
-+
- OriginUsageResult::OriginUsageResult(uint64_t aUsage,
- uint64_t aFileUsage,
- uint64_t aLimit)
- : mUsage(aUsage)
- , mFileUsage(aFileUsage)
- , mLimit(aLimit)
- {
- }
-diff --git a/dom/quota/QuotaResults.h b/dom/quota/QuotaResults.h
---- a/dom/quota/QuotaResults.h
-+++ b/dom/quota/QuotaResults.h
-@@ -8,16 +8,36 @@
- #define mozilla_dom_quota_QuotaResults_h
-
- #include "nsIQuotaResults.h"
-
- namespace mozilla {
- namespace dom {
- namespace quota {
-
-+class UsageResult
-+ : public nsIQuotaUsageResult
-+{
-+ nsCString mOrigin;
-+ uint64_t mUsage;
-+ bool mPersisted;
-+
-+public:
-+ UsageResult(const nsACString& aOrigin,
-+ bool aPersisted,
-+ uint64_t aUsage);
-+
-+private:
-+ virtual ~UsageResult()
-+ { }
-+
-+ NS_DECL_ISUPPORTS
-+ NS_DECL_NSIQUOTAUSAGERESULT
-+};
-+
- class OriginUsageResult
- : public nsIQuotaOriginUsageResult
- {
- uint64_t mUsage;
- uint64_t mFileUsage;
- uint64_t mLimit;
-
- public:
-diff --git a/dom/quota/nsIQuotaManagerService.idl b/dom/quota/nsIQuotaManagerService.idl
---- a/dom/quota/nsIQuotaManagerService.idl
-+++ b/dom/quota/nsIQuotaManagerService.idl
-@@ -10,16 +10,31 @@ interface nsIPrincipal;
- interface nsIQuotaRequest;
- interface nsIQuotaUsageCallback;
- interface nsIQuotaUsageRequest;
-
- [scriptable, builtinclass, uuid(1b3d0a38-8151-4cf9-89fa-4f92c2ef0e7e)]
- interface nsIQuotaManagerService : nsISupports
- {
- /**
-+ * Schedules an asynchronous callback that will inspect all origins and
-+ * return the total amount of disk space being used by storages for each
-+ * origin separately.
-+ *
-+ * @param aCallback
-+ * The callback that will be called when the usage is available.
-+ * @param aGetAll
-+ * An optional boolean to indicate inspection of all origins,
-+ * including internal ones.
-+ */
-+ [must_use] nsIQuotaUsageRequest
-+ getUsage(in nsIQuotaUsageCallback aCallback,
-+ [optional] in boolean aGetAll);
-+
-+ /**
- * Schedules an asynchronous callback that will return the total amount of
- * disk space being used by storages for the given origin.
- *
- * @param aPrincipal
- * A principal for the origin whose usage is being queried.
- * @param aCallback
- * The callback that will be called when the usage is available.
- * @param aGetGroupUsage
-diff --git a/dom/quota/nsIQuotaRequests.idl b/dom/quota/nsIQuotaRequests.idl
---- a/dom/quota/nsIQuotaRequests.idl
-+++ b/dom/quota/nsIQuotaRequests.idl
-@@ -18,16 +18,17 @@ interface nsIQuotaRequestBase : nsISuppo
-
- [must_use] readonly attribute nsresult resultCode;
- };
-
- [scriptable, uuid(166e28e6-cf6d-4927-a6d7-b51bca9d3469)]
- interface nsIQuotaUsageRequest : nsIQuotaRequestBase
- {
- // The result can contain one of these types:
-+ // array of nsIQuotaUsageResult
- // nsIQuotaOriginUsageResult
- [must_use] readonly attribute nsIVariant result;
-
- attribute nsIQuotaUsageCallback callback;
-
- [must_use] void
- cancel();
- };
-diff --git a/dom/quota/nsIQuotaResults.idl b/dom/quota/nsIQuotaResults.idl
---- a/dom/quota/nsIQuotaResults.idl
-+++ b/dom/quota/nsIQuotaResults.idl
-@@ -1,16 +1,26 @@
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* vim: set ts=2 et sw=2 tw=80: */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
- #include "nsISupports.idl"
-
-+[scriptable, function, uuid(d8c9328b-9aa8-4f5d-90e6-482de4a6d5b8)]
-+interface nsIQuotaUsageResult : nsISupports
-+{
-+ readonly attribute ACString origin;
-+
-+ readonly attribute boolean persisted;
-+
-+ readonly attribute unsigned long long usage;
-+};
-+
- [scriptable, function, uuid(96df03d2-116a-493f-bb0b-118c212a6b32)]
- interface nsIQuotaOriginUsageResult : nsISupports
- {
- readonly attribute unsigned long long usage;
-
- readonly attribute unsigned long long fileUsage;
-
- readonly attribute unsigned long long limit;
-
diff --git a/gnu/packages/patches/icecat-bug-1414945.patch b/gnu/packages/patches/icecat-bug-1414945.patch
deleted file mode 100644
index 3638ace1c4..0000000000
--- a/gnu/packages/patches/icecat-bug-1414945.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-Based on:
- https://hg.mozilla.org/releases/mozilla-esr52/raw-rev/d303b3bb88c3
-
-Adapted to apply cleanly to IceCat.
-
-# HG changeset patch
-# User Philip Chimento <philip.chimento@gmail.com>
-# Date 1510012155 28800
-# Node ID d303b3bb88c3345d3a089901e2b6fe883d148e44
-# Parent 0152d097672f7e99504815cf7b06d9f303419fba
-Bug 1414945 - Don't use TimeDuration in static initializer. r=jandem, a=ritu
-
-On Darwin this would cause a race between two static initializers.
-
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -138,17 +138,17 @@ static const size_t gMaxStackSize = 2 *
- #else
- static const size_t gMaxStackSize = 128 * sizeof(size_t) * 1024;
- #endif
-
- /*
- * Limit the timeout to 30 minutes to prevent an overflow on platfoms
- * that represent the time internally in microseconds using 32-bit int.
- */
--static const TimeDuration MAX_TIMEOUT_INTERVAL = TimeDuration::FromSeconds(1800.0);
-+static const double MAX_TIMEOUT_SECONDS = 1800.0;
-
- // SharedArrayBuffer and Atomics settings track IceCat. Choose a custom setting
- // with --shared-memory={on,off}.
- #ifndef RELEASE_OR_BETA
- # define SHARED_MEMORY_DEFAULT 1
- #else
- # define SHARED_MEMORY_DEFAULT 0
- #endif
-@@ -3518,16 +3518,17 @@ Sleep_fn(JSContext* cx, unsigned argc, V
- if (!ToNumber(cx, args[0], &t_secs))
- return false;
- if (mozilla::IsNaN(t_secs)) {
- JS_ReportErrorASCII(cx, "sleep interval is not a number");
- return false;
- }
-
- duration = TimeDuration::FromSeconds(Max(0.0, t_secs));
-+ const TimeDuration MAX_TIMEOUT_INTERVAL = TimeDuration::FromSeconds(MAX_TIMEOUT_SECONDS);
- if (duration > MAX_TIMEOUT_INTERVAL) {
- JS_ReportErrorASCII(cx, "Excessive sleep interval");
- return false;
- }
- }
- {
- LockGuard<Mutex> guard(sc->watchdogLock);
- TimeStamp toWakeup = TimeStamp::Now() + duration;
-@@ -3675,16 +3676,17 @@ CancelExecution(JSContext* cx)
-
- static bool
- SetTimeoutValue(JSContext* cx, double t)
- {
- if (mozilla::IsNaN(t)) {
- JS_ReportErrorASCII(cx, "timeout is not a number");
- return false;
- }
-+ const TimeDuration MAX_TIMEOUT_INTERVAL = TimeDuration::FromSeconds(MAX_TIMEOUT_SECONDS);
- if (TimeDuration::FromSeconds(t) > MAX_TIMEOUT_INTERVAL) {
- JS_ReportErrorASCII(cx, "Excessive timeout value");
- return false;
- }
- GetShellContext(cx)->timeoutInterval = t;
- if (!ScheduleWatchdog(cx, t)) {
- JS_ReportErrorASCII(cx, "Failed to create the watchdog");
- return false;
-
diff --git a/gnu/packages/patches/icecat-bug-1415133.patch b/gnu/packages/patches/icecat-bug-1415133.patch
deleted file mode 100644
index 4e322d21fb..0000000000
--- a/gnu/packages/patches/icecat-bug-1415133.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Based on:
- https://hg.mozilla.org/releases/mozilla-esr52/raw-rev/22fe3ff3f923
-
-Adapted to apply cleanly to IceCat.
-
-# HG changeset patch
-# User Marco Bonardo <mbonardo@mozilla.com>
-# Date 1510052455 -3600
-# Node ID 22fe3ff3f92358596521f7155ddc512006022207
-# Parent 2909ba991f3134f9fbf4859cf08582f1c9845594
-Bug 1415133 - Downgrades from 55+ to ESR lose bookmarks. r=past a=lizzard
-
-MozReview-Commit-ID: 44Rw7m1FP4h
-
-diff --git a/toolkit/components/places/Database.cpp b/toolkit/components/places/Database.cpp
---- a/toolkit/components/places/Database.cpp
-+++ b/toolkit/components/places/Database.cpp
-@@ -761,16 +761,21 @@ Database::InitSchema(bool* aDatabaseMigr
- // 2. implement a method that performs upgrade to your version from the
- // previous one.
- //
- // NOTE: The downgrade process is pretty much complicated by the fact old
- // versions cannot know what a new version is going to implement.
- // The only thing we will do for downgrades is setting back the schema
- // version, so that next upgrades will run again the migration step.
-
-+ if (currentSchemaVersion > 36) {
-+ // These versions are not downgradable.
-+ return NS_ERROR_FILE_CORRUPTED;
-+ }
-+
- if (currentSchemaVersion < DATABASE_SCHEMA_VERSION) {
- *aDatabaseMigrated = true;
-
- if (currentSchemaVersion < 11) {
- // These are versions older than IceCat 4 that are not supported
- // anymore. In this case it's safer to just replace the database.
- return NS_ERROR_FILE_CORRUPTED;
- }
-
diff --git a/gnu/packages/patches/icecat-bug-1424373-pt2.patch b/gnu/packages/patches/icecat-bug-1424373-pt2.patch
deleted file mode 100644
index cdc7226bd3..0000000000
--- a/gnu/packages/patches/icecat-bug-1424373-pt2.patch
+++ /dev/null
@@ -1,183 +0,0 @@
-Based on:
- https://hg.mozilla.org/releases/mozilla-esr52/raw-rev/19ea736e7e3d
-
-Adapted to apply cleanly to IceCat.
-
-# HG changeset patch
-# User Mike Conley <mconley@mozilla.com>
-# Date 1513892173 18000
-# Node ID 19ea736e7e3d20555ee6633b9d7803c1225979e1
-# Parent 320032aaa06899f5585dcd0288059e5342118714
-Bug 1424373 - Rename crash report submission pref. r=Mossop a=jcristau
-
-diff --git a/browser/app/profile/icecat.js b/browser/app/profile/icecat.js
---- a/browser/app/profile/icecat.js
-+++ b/browser/app/profile/icecat.js
-@@ -1557,15 +1557,15 @@ pref("browser.crashReports.unsubmittedCh
- pref("browser.crashReports.unsubmittedCheck.enabled", false);
- #endif
-
- // chancesUntilSuppress is how many times we'll show the unsubmitted
- // crash report notification across different days and shutdown
- // without a user choice before we suppress the notification for
- // some number of days.
- pref("browser.crashReports.unsubmittedCheck.chancesUntilSuppress", 4);
--pref("browser.crashReports.unsubmittedCheck.autoSubmit", false);
-+pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false);
-
- #ifdef NIGHTLY_BUILD
- // Enable the (fairly costly) client/server validation on nightly only. The other prefs
- // controlling validation are located in /services/sync/services-sync.js
- pref("services.sync.validation.enabled", true);
- #endif
-diff --git a/browser/base/content/test/tabcrashed/browser_autoSubmitRequest.js b/browser/base/content/test/tabcrashed/browser_autoSubmitRequest.js
---- a/browser/base/content/test/tabcrashed/browser_autoSubmitRequest.js
-+++ b/browser/base/content/test/tabcrashed/browser_autoSubmitRequest.js
-@@ -1,12 +1,12 @@
- "use strict";
-
- const PAGE = "data:text/html,<html><body>A%20regular,%20everyday,%20normal%20page.";
--const AUTOSUBMIT_PREF = "browser.crashReports.unsubmittedCheck.autoSubmit";
-+const AUTOSUBMIT_PREF = "browser.crashReports.unsubmittedCheck.autoSubmit2";
-
- const {TabStateFlusher} =
- Cu.import("resource:///modules/sessionstore/TabStateFlusher.jsm", {});
-
- // On debug builds, crashing tabs results in much thinking, which
- // slows down the test and results in intermittent test timeouts,
- // so we'll pump up the expected timeout for this test.
- requestLongerTimeout(2);
-diff --git a/browser/components/preferences/in-content/advanced.xul b/browser/components/preferences/in-content/advanced.xul
---- a/browser/components/preferences/in-content/advanced.xul
-+++ b/browser/components/preferences/in-content/advanced.xul
-@@ -51,18 +51,18 @@
- #ifdef MOZ_TELEMETRY_REPORTING
- <preference id="toolkit.telemetry.enabled"
- name="toolkit.telemetry.enabled"
- type="bool"/>
- #endif
-
- <!-- Data Choices tab -->
- #ifdef MOZ_CRASHREPORTER
-- <preference id="browser.crashReports.unsubmittedCheck.autoSubmit"
-- name="browser.crashReports.unsubmittedCheck.autoSubmit"
-+ <preference id="browser.crashReports.unsubmittedCheck.autoSubmit2"
-+ name="browser.crashReports.unsubmittedCheck.autoSubmit2"
- type="bool"/>
- #endif
-
- <!-- Network tab -->
- <preference id="browser.cache.disk.capacity"
- name="browser.cache.disk.capacity"
- type="int"/>
- <preference id="browser.offline-apps.notify"
-@@ -232,17 +232,17 @@
- </hbox>
- </vbox>
- </groupbox>
- #endif
- #ifdef MOZ_CRASHREPORTER
- <groupbox>
- <caption>
- <checkbox id="automaticallySubmitCrashesBox"
-- preference="browser.crashReports.unsubmittedCheck.autoSubmit"
-+ preference="browser.crashReports.unsubmittedCheck.autoSubmit2"
- label="&alwaysSubmitCrashReports.label;"
- accesskey="&alwaysSubmitCrashReports.accesskey;"/>
- </caption>
- <hbox class="indent">
- <label flex="1">&crashReporterDesc2.label;</label>
- <spacer flex="10"/>
- <label id="crashReporterLearnMore"
- class="text-link">&crashReporterLearnMore.label;</label>
-diff --git a/browser/components/sessionstore/test/browser_background_tab_crash.js b/browser/components/sessionstore/test/browser_background_tab_crash.js
---- a/browser/components/sessionstore/test/browser_background_tab_crash.js
-+++ b/browser/components/sessionstore/test/browser_background_tab_crash.js
-@@ -142,17 +142,17 @@ add_task(function* test_background_crash
- /**
- * Tests that if a content process crashes taking down only
- * background tabs, and the user is configured to send backlogged
- * crash reports automatically, that the tab crashed page is not
- * shown.
- */
- add_task(function* test_background_crash_autosubmit_backlogged() {
- yield SpecialPowers.pushPrefEnv({
-- set: [["browser.crashReports.unsubmittedCheck.autoSubmit", true]],
-+ set: [["browser.crashReports.unsubmittedCheck.autoSubmit2", true]],
- });
-
- yield setupBackgroundTabs(function*([tab1, tab2]) {
- // Let's crash one of those background tabs now...
- yield crashBackgroundTabs([tab1, tab2]);
-
- // Selecting the first tab should restore it.
- let tabRestored = promiseTabRestored(tab1);
-diff --git a/browser/modules/ContentCrashHandlers.jsm b/browser/modules/ContentCrashHandlers.jsm
---- a/browser/modules/ContentCrashHandlers.jsm
-+++ b/browser/modules/ContentCrashHandlers.jsm
-@@ -865,21 +865,21 @@ this.UnsubmittedCrashHandler = {
- return nb.appendNotification(message, notificationID,
- "chrome://browser/skin/tab-crashed.svg",
- nb.PRIORITY_INFO_HIGH, buttons,
- eventCallback);
- },
-
- get autoSubmit() {
- return Services.prefs
-- .getBoolPref("browser.crashReports.unsubmittedCheck.autoSubmit");
-+ .getBoolPref("browser.crashReports.unsubmittedCheck.autoSubmit2");
- },
-
- set autoSubmit(val) {
-- Services.prefs.setBoolPref("browser.crashReports.unsubmittedCheck.autoSubmit",
-+ Services.prefs.setBoolPref("browser.crashReports.unsubmittedCheck.autoSubmit2",
- val);
- },
-
- /**
- * Attempt to submit reports to the crash report server. Each
- * report will have the "SubmittedFromInfobar" extra key set
- * to true.
- *
-diff --git a/browser/modules/test/browser_UnsubmittedCrashHandler.js b/browser/modules/test/browser_UnsubmittedCrashHandler.js
---- a/browser/modules/test/browser_UnsubmittedCrashHandler.js
-+++ b/browser/modules/test/browser_UnsubmittedCrashHandler.js
-@@ -344,17 +344,17 @@ add_task(function* test_can_submit_sever
- clearPendingCrashReports();
- });
-
- /**
- * Tests that choosing "Send Always" flips the autoSubmit pref
- * and sends the pending crash reports.
- */
- add_task(function* test_can_submit_always() {
-- let pref = "browser.crashReports.unsubmittedCheck.autoSubmit";
-+ let pref = "browser.crashReports.unsubmittedCheck.autoSubmit2";
- Assert.equal(Services.prefs.getBoolPref(pref), false,
- "We should not be auto-submitting by default");
-
- let reportIDs = yield createPendingCrashReports(1);
- let notification =
- yield UnsubmittedCrashHandler.checkForUnsubmittedCrashReports();
- Assert.ok(notification, "There should be a notification");
-
-@@ -388,17 +388,17 @@ add_task(function* test_can_submit_alway
-
- /**
- * Tests that if the user has chosen to automatically send
- * crash reports that no notification is displayed to the
- * user.
- */
- add_task(function* test_can_auto_submit() {
- yield SpecialPowers.pushPrefEnv({ set: [
-- ["browser.crashReports.unsubmittedCheck.autoSubmit", true],
-+ ["browser.crashReports.unsubmittedCheck.autoSubmit2", true],
- ]});
-
- let reportIDs = yield createPendingCrashReports(3);
- let promiseReports = waitForSubmittedReports(reportIDs);
- let notification =
- yield UnsubmittedCrashHandler.checkForUnsubmittedCrashReports();
- Assert.equal(notification, null, "There should be no notification");
- info("Waiting on reports to be received.");
-