summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
Diffstat (limited to 'gnu')
-rw-r--r--gnu/packages/gnuzilla.scm23
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-1587-bug-1042567.patch30
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-1587-bug-1072847.patch19
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-1587-bug-1079729.patch191
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-1587-bug-1080312.patch308
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-1587-bug-1089207.patch119
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-1590.patch33
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-1592.patch400
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-1593.patch154
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-1594.patch34
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-8634-pt1.patch410
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-8634-pt2.patch30
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-8638-pt1.patch27
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-8638-pt2.patch149
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-8639.patch92
-rw-r--r--gnu/packages/patches/icecat-CVE-2014-8641.patch29
-rw-r--r--gnu/packages/patches/icecat-armhf-xpcom.patch25
17 files changed, 3 insertions, 2070 deletions
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 9c6b39f3d2..862dfe1a31 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -213,32 +213,15 @@ standards.")
 (define-public icecat
   (package
     (name "icecat")
-    (version "31.2.0")
+    (version "31.4.0")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/gnuzilla/"
-                          version "/" name "-" version ".tar.xz"))
+                          version "/" name "-" version ".tar.bz2"))
       (sha256
        (base32
-        "02r9klfc0z26w270inq652249hq0wfzvwhzvwmk0n8v8nzkk5idh"))
-      (patches (map search-patch
-                    '("icecat-CVE-2014-1587-bug-1042567.patch"
-                      "icecat-CVE-2014-1587-bug-1072847.patch"
-                      "icecat-CVE-2014-1587-bug-1079729.patch"
-                      "icecat-CVE-2014-1587-bug-1080312.patch"
-                      "icecat-CVE-2014-1587-bug-1089207.patch"
-                      "icecat-CVE-2014-1590.patch"
-                      "icecat-CVE-2014-1592.patch"
-                      "icecat-CVE-2014-1593.patch"
-                      "icecat-CVE-2014-1594.patch"
-                      "icecat-armhf-xpcom.patch"
-                      "icecat-CVE-2014-8639.patch"
-                      "icecat-CVE-2014-8634-pt1.patch"
-                      "icecat-CVE-2014-8634-pt2.patch"
-                      "icecat-CVE-2014-8641.patch"
-                      "icecat-CVE-2014-8638-pt1.patch"
-                      "icecat-CVE-2014-8638-pt2.patch")))))
+        "0q5ilgfybcrbwf9hq9zc1cpnlhq1pddnnjmdrxrcrrg8lgx5kkc2"))))
     (build-system gnu-build-system)
     (inputs
      `(("alsa-lib" ,alsa-lib)
diff --git a/gnu/packages/patches/icecat-CVE-2014-1587-bug-1042567.patch b/gnu/packages/patches/icecat-CVE-2014-1587-bug-1042567.patch
deleted file mode 100644
index 4e45e3062f..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-1587-bug-1042567.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-commit 60529fc02cf10482d8fecd699eea271ddc22bcb9
-Author: Jason Orendorff <jorendorff@mozilla.com>
-Date:   Thu Aug 28 15:43:57 2014 -0500
-
-    Bug 1042567 - Reflect JSPropertyOp properties more consistently as data properties. r=efaust, a=lmandel
-
-	Modified   js/src/jsobj.cpp
-diff --git a/js/src/jsobj.cpp b/js/src/jsobj.cpp
-index 2745509..ad336f3 100644
---- a/js/src/jsobj.cpp
-+++ b/js/src/jsobj.cpp
-@@ -235,11 +235,18 @@ js::GetOwnPropertyDescriptor(JSContext *cx, HandleObject obj, HandleId id,
-     if (pobj->isNative()) {
-         desc.setAttributes(GetShapeAttributes(pobj, shape));
-         if (desc.hasGetterOrSetterObject()) {
-+            MOZ_ASSERT(desc.isShared());
-             doGet = false;
-             if (desc.hasGetterObject())
-                 desc.setGetterObject(shape->getterObject());
-             if (desc.hasSetterObject())
-                 desc.setSetterObject(shape->setterObject());
-+        } else {
-+            // This is either a straight-up data property or (rarely) a
-+            // property with a JSPropertyOp getter/setter. The latter must be
-+            // reported to the caller as a plain data property, so don't
-+            // populate desc.getter/setter, and mask away the SHARED bit.
-+            desc.attributesRef() &= ~JSPROP_SHARED;
-         }
-     } else {
-         if (!JSObject::getGenericAttributes(cx, pobj, id, &desc.attributesRef()))
diff --git a/gnu/packages/patches/icecat-CVE-2014-1587-bug-1072847.patch b/gnu/packages/patches/icecat-CVE-2014-1587-bug-1072847.patch
deleted file mode 100644
index 448b096b81..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-1587-bug-1072847.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-commit 5d91f3b10f999e852e0392470198bd6aefc87e1e
-Author: Jeff Muizelaar <jmuizelaar@mozilla.com>
-Date:   Tue Oct 28 10:08:25 2014 -0400
-
-    Bug 1072847 - Initialize mSurface. r=BenWa, a=bkerensa
-
-	Modified   gfx/2d/DrawTargetCairo.cpp
-diff --git a/gfx/2d/DrawTargetCairo.cpp b/gfx/2d/DrawTargetCairo.cpp
-index 48c2c73..78d9e4f 100644
---- a/gfx/2d/DrawTargetCairo.cpp
-+++ b/gfx/2d/DrawTargetCairo.cpp
-@@ -353,6 +353,7 @@ NeedIntermediateSurface(const Pattern& aPattern, const DrawOptions& aOptions)
- 
- DrawTargetCairo::DrawTargetCairo()
-   : mContext(nullptr)
-+  , mSurface(nullptr)
-   , mLockedBits(nullptr)
- {
- }
diff --git a/gnu/packages/patches/icecat-CVE-2014-1587-bug-1079729.patch b/gnu/packages/patches/icecat-CVE-2014-1587-bug-1079729.patch
deleted file mode 100644
index 3ef60baaad..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-1587-bug-1079729.patch
+++ /dev/null
@@ -1,191 +0,0 @@
-commit 5de6730cc26744b9efcf4d4adb4a4c45023ef8a0
-Author: Randell Jesup <rjesup@jesup.org>
-Date:   Tue Oct 28 11:06:00 2014 -0400
-
-    Bug 1079729: Fix handling of increasing number of SCTP channels used by DataChannels r=tuexen a=lsblakk
-
-	Modified   media/webrtc/signaling/src/sipcc/core/gsm/h/fsm.h
-diff --git a/media/webrtc/signaling/src/sipcc/core/gsm/h/fsm.h b/media/webrtc/signaling/src/sipcc/core/gsm/h/fsm.h
-index ba8e1ff..8d964f1 100755
---- a/media/webrtc/signaling/src/sipcc/core/gsm/h/fsm.h
-+++ b/media/webrtc/signaling/src/sipcc/core/gsm/h/fsm.h
-@@ -225,7 +225,7 @@ typedef struct fsmdef_media_t_ {
-     /*
-      * Data Channel properties
-      */
--#define WEBRTC_DATACHANNEL_STREAMS_DEFAULT 16
-+#define WEBRTC_DATACHANNEL_STREAMS_DEFAULT 256
-     uint32         datachannel_streams;
-     char           datachannel_protocol[SDP_MAX_STRING_LEN + 1];
- 
-	Modified   netwerk/sctp/datachannel/DataChannel.cpp
-diff --git a/netwerk/sctp/datachannel/DataChannel.cpp b/netwerk/sctp/datachannel/DataChannel.cpp
-index 414e3db..a00d938 100644
---- a/netwerk/sctp/datachannel/DataChannel.cpp
-+++ b/netwerk/sctp/datachannel/DataChannel.cpp
-@@ -910,10 +910,12 @@ DataChannelConnection::RequestMoreStreams(int32_t aNeeded)
-   uint32_t outStreamsNeeded;
-   socklen_t len;
- 
--  if (aNeeded + mStreams.Length() > MAX_NUM_STREAMS)
-+  if (aNeeded + mStreams.Length() > MAX_NUM_STREAMS) {
-     aNeeded = MAX_NUM_STREAMS - mStreams.Length();
--  if (aNeeded <= 0)
-+  }
-+  if (aNeeded <= 0) {
-     return false;
-+  }
- 
-   len = (socklen_t)sizeof(struct sctp_status);
-   if (usrsctp_getsockopt(mMasterSocket, IPPROTO_SCTP, SCTP_STATUS, &status, &len) < 0) {
-@@ -922,19 +924,25 @@ DataChannelConnection::RequestMoreStreams(int32_t aNeeded)
-   }
-   outStreamsNeeded = aNeeded; // number to add
- 
--  memset(&sas, 0, sizeof(struct sctp_add_streams));
-+  // Note: if multiple channel opens happen when we don't have enough space,
-+  // we'll call RequestMoreStreams() multiple times
-+  memset(&sas, 0, sizeof(sas));
-   sas.sas_instrms = 0;
-   sas.sas_outstrms = (uint16_t)outStreamsNeeded; /* XXX error handling */
-   // Doesn't block, we get an event when it succeeds or fails
-   if (usrsctp_setsockopt(mMasterSocket, IPPROTO_SCTP, SCTP_ADD_STREAMS, &sas,
-                          (socklen_t) sizeof(struct sctp_add_streams)) < 0) {
--    if (errno == EALREADY)
-+    if (errno == EALREADY) {
-+      LOG(("Already have %u output streams", outStreamsNeeded));
-       return true;
-+    }
- 
-     LOG(("***failed: setsockopt ADD errno=%d", errno));
-     return false;
-   }
-   LOG(("Requested %u more streams", outStreamsNeeded));
-+  // We add to mStreams when we get a SCTP_STREAM_CHANGE_EVENT and the
-+  // values are larger than mStreams.Length()
-   return true;
- }
- 
-@@ -1050,6 +1058,13 @@ DataChannelConnection::SendDeferredMessages()
-                                  channel->mFlags & DATA_CHANNEL_FLAGS_OUT_OF_ORDER_ALLOWED,
-                                  channel->mPrPolicy, channel->mPrValue)) {
-         channel->mFlags &= ~DATA_CHANNEL_FLAGS_SEND_REQ;
-+
-+        channel->mState = OPEN;
-+        channel->mReady = true;
-+        LOG(("%s: sending ON_CHANNEL_OPEN for %p", __FUNCTION__, channel.get()));
-+        NS_DispatchToMainThread(new DataChannelOnMessageAvailable(
-+                                  DataChannelOnMessageAvailable::ON_CHANNEL_OPEN, this,
-+                                  channel));
-         sent = true;
-       } else {
-         if (errno == EAGAIN || errno == EWOULDBLOCK) {
-@@ -1177,6 +1192,7 @@ DataChannelConnection::HandleOpenRequestMessage(const struct rtcweb_datachannel_
-       prPolicy = SCTP_PR_SCTP_TTL;
-       break;
-     default:
-+      LOG(("Unknown channel type", req->channel_type));
-       /* XXX error handling */
-       return;
-   }
-@@ -1203,6 +1219,10 @@ DataChannelConnection::HandleOpenRequestMessage(const struct rtcweb_datachannel_
-     }
-     return;
-   }
-+  if (stream >= mStreams.Length()) {
-+    LOG(("%s: stream %u out of bounds (%u)", __FUNCTION__, stream, mStreams.Length()));
-+    return;
-+  }
- 
-   nsCString label(nsDependentCSubstring(&req->label[0], ntohs(req->label_length)));
-   nsCString protocol(nsDependentCSubstring(&req->label[ntohs(req->label_length)],
-@@ -1220,8 +1240,8 @@ DataChannelConnection::HandleOpenRequestMessage(const struct rtcweb_datachannel_
- 
-   channel->mState = DataChannel::WAITING_TO_OPEN;
- 
--  LOG(("%s: sending ON_CHANNEL_CREATED for %s/%s: %u", __FUNCTION__,
--       channel->mLabel.get(), channel->mProtocol.get(), stream));
-+  LOG(("%s: sending ON_CHANNEL_CREATED for %s/%s: %u (state %u)", __FUNCTION__,
-+       channel->mLabel.get(), channel->mProtocol.get(), stream, channel->mState));
-   NS_DispatchToMainThread(new DataChannelOnMessageAvailable(
-                             DataChannelOnMessageAvailable::ON_CHANNEL_CREATED,
-                             this, channel));
-@@ -1739,13 +1759,14 @@ DataChannelConnection::HandleStreamResetEvent(const struct sctp_stream_reset_eve
-           // 2. We sent our own reset (CLOSING); either they crossed on the
-           //    wire, or this is a response to our Reset.
-           //    Go to CLOSED
--          // 3. We've sent a open but haven't gotten a response yet (OPENING)
-+          // 3. We've sent a open but haven't gotten a response yet (CONNECTING)
-           //    I believe this is impossible, as we don't have an input stream yet.
- 
-           LOG(("Incoming: Channel %u  closed, state %d",
-                channel->mStream, channel->mState));
-           ASSERT_WEBRTC(channel->mState == DataChannel::OPEN ||
-                         channel->mState == DataChannel::CLOSING ||
-+                        channel->mState == DataChannel::CONNECTING ||
-                         channel->mState == DataChannel::WAITING_TO_OPEN);
-           if (channel->mState == DataChannel::OPEN ||
-               channel->mState == DataChannel::WAITING_TO_OPEN) {
-@@ -1791,20 +1812,21 @@ DataChannelConnection::HandleStreamChangeEvent(const struct sctp_stream_change_e
-     return;
-   } else {
-     if (strchg->strchange_instrms > mStreams.Length()) {
--      LOG(("Other side increased streamds from %u to %u",
-+      LOG(("Other side increased streams from %u to %u",
-            mStreams.Length(), strchg->strchange_instrms));
-     }
--    if (strchg->strchange_outstrms > mStreams.Length()) {
-+    if (strchg->strchange_outstrms > mStreams.Length() ||
-+        strchg->strchange_instrms > mStreams.Length()) {
-       uint16_t old_len = mStreams.Length();
-+      uint16_t new_len = std::max(strchg->strchange_outstrms,
-+                                  strchg->strchange_instrms);
-       LOG(("Increasing number of streams from %u to %u - adding %u (in: %u)",
--           old_len,
--           strchg->strchange_outstrms,
--           strchg->strchange_outstrms - old_len,
-+           old_len, new_len, new_len - old_len,
-            strchg->strchange_instrms));
-       // make sure both are the same length
--      mStreams.AppendElements(strchg->strchange_outstrms - old_len);
-+      mStreams.AppendElements(new_len - old_len);
-       LOG(("New length = %d (was %d)", mStreams.Length(), old_len));
--      for (uint32_t i = old_len; i < mStreams.Length(); ++i) {
-+      for (size_t i = old_len; i < mStreams.Length(); ++i) {
-         mStreams[i] = nullptr;
-       }
-       // Re-process any channels waiting for streams.
-@@ -1815,13 +1837,17 @@ DataChannelConnection::HandleStreamChangeEvent(const struct sctp_stream_change_e
-       // Could make a more complex API for OpenXxxFinish() and avoid this loop
-       int32_t num_needed = mPending.GetSize();
-       LOG(("%d of %d new streams already needed", num_needed,
--           strchg->strchange_outstrms - old_len));
--      num_needed -= (strchg->strchange_outstrms - old_len); // number we added
-+           new_len - old_len));
-+      num_needed -= (new_len - old_len); // number we added
-       if (num_needed > 0) {
-         if (num_needed < 16)
-           num_needed = 16;
-         LOG(("Not enough new streams, asking for %d more", num_needed));
-         RequestMoreStreams(num_needed);
-+      } else if (strchg->strchange_outstrms < strchg->strchange_instrms) {
-+        LOG(("Requesting %d output streams to match partner",
-+             strchg->strchange_instrms - strchg->strchange_outstrms));
-+        RequestMoreStreams(strchg->strchange_instrms - strchg->strchange_outstrms);
-       }
- 
-       ProcessQueuedOpens();
-	Modified   netwerk/sctp/datachannel/DataChannelProtocol.h
-diff --git a/netwerk/sctp/datachannel/DataChannelProtocol.h b/netwerk/sctp/datachannel/DataChannelProtocol.h
-index 549f74b..74fbe58 100644
---- a/netwerk/sctp/datachannel/DataChannelProtocol.h
-+++ b/netwerk/sctp/datachannel/DataChannelProtocol.h
-@@ -17,7 +17,7 @@
- #endif
- 
- // Duplicated in fsm.def
--#define WEBRTC_DATACHANNEL_STREAMS_DEFAULT 16
-+#define WEBRTC_DATACHANNEL_STREAMS_DEFAULT 256
- 
- #define DATA_CHANNEL_PPID_CONTROL        50
- #define DATA_CHANNEL_PPID_BINARY         52
diff --git a/gnu/packages/patches/icecat-CVE-2014-1587-bug-1080312.patch b/gnu/packages/patches/icecat-CVE-2014-1587-bug-1080312.patch
deleted file mode 100644
index 5efac49e12..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-1587-bug-1080312.patch
+++ /dev/null
@@ -1,308 +0,0 @@
-commit d74bdb4589ad714e2a45e282974db075de2be673
-Author: Randell Jesup <rjesup@jesup.org>
-Date:   Wed Nov 12 22:59:53 2014 -0500
-
-    Bug 1080312 - Update iteration code from upstream. r=jesup, a=abillings
-
-	Modified   netwerk/sctp/src/moz.build
-diff --git a/netwerk/sctp/src/moz.build b/netwerk/sctp/src/moz.build
-index 1901a41..82103b9 100644
---- a/netwerk/sctp/src/moz.build
-+++ b/netwerk/sctp/src/moz.build
-@@ -31,7 +31,6 @@ SOURCES += [
-     'user_environment.c',
-     'user_mbuf.c',
-     'user_recv_thread.c',
--    'user_sctp_timer_iterate.c',
-     'user_socket.c',
- ]
- 
-	Modified   netwerk/sctp/src/netinet/sctp_callout.c
-diff --git a/netwerk/sctp/src/netinet/sctp_callout.c b/netwerk/sctp/src/netinet/sctp_callout.c
-index 67b7566..e8ac77f 100755
---- a/netwerk/sctp/src/netinet/sctp_callout.c
-+++ b/netwerk/sctp/src/netinet/sctp_callout.c
-@@ -30,9 +30,27 @@
-  * THE POSSIBILITY OF SUCH DAMAGE.
-  */
- 
-+#if defined(__Userspace__)
-+#include <sys/types.h>
-+#if !defined (__Userspace_os_Windows)
-+#include <sys/wait.h>
-+#include <unistd.h>
-+#include <pthread.h>
-+#endif
-+#if defined(__Userspace_os_NaCl)
-+#include <sys/select.h>
-+#endif
-+#include <stdlib.h>
-+#include <string.h>
-+#include <stdio.h>
-+#include <errno.h>
-+#include <netinet/sctp_sysctl.h>
-+#include <netinet/sctp_pcb.h>
-+#else
- #include <netinet/sctp_os.h>
- #include <netinet/sctp_callout.h>
- #include <netinet/sctp_pcb.h>
-+#endif
- 
- /*
-  * Callout/Timer routines for OS that doesn't have them
-@@ -117,24 +135,16 @@ sctp_os_timer_stop(sctp_os_timer_t *c)
- 	return (1);
- }
- 
--#if defined(__APPLE__)
--/*
-- * For __APPLE__, use a single main timer at a faster resolution than
-- * fastim.  The timer just calls this existing callout infrastructure.
-- */
--#endif
--void
--sctp_timeout(void *arg SCTP_UNUSED)
-+static void
-+sctp_handle_tick(int delta)
- {
- 	sctp_os_timer_t *c;
- 	void (*c_func)(void *);
- 	void *c_arg;
- 
- 	SCTP_TIMERQ_LOCK();
--#if defined(__APPLE__)
- 	/* update our tick count */
--	ticks += SCTP_BASE_VAR(sctp_main_timer_ticks);
--#endif
-+	ticks += delta;
- 	c = TAILQ_FIRST(&SCTP_BASE_INFO(callqueue));
- 	while (c) {
- 		if (c->c_time <= ticks) {
-@@ -155,9 +165,60 @@ sctp_timeout(void *arg SCTP_UNUSED)
- 	}
- 	sctp_os_timer_next = NULL;
- 	SCTP_TIMERQ_UNLOCK();
-+}
- 
- #if defined(__APPLE__)
--	/* restart the main timer */
-+void
-+sctp_timeout(void *arg SCTP_UNUSED)
-+{
-+	sctp_handle_tick(SCTP_BASE_VAR(sctp_main_timer_ticks));
- 	sctp_start_main_timer();
-+}
- #endif
-+
-+#if defined(__Userspace__)
-+#define TIMEOUT_INTERVAL 10
-+
-+void *
-+user_sctp_timer_iterate(void *arg)
-+{
-+	for (;;) {
-+#if defined (__Userspace_os_Windows)
-+		Sleep(TIMEOUT_INTERVAL);
-+#else
-+		struct timeval timeout;
-+
-+		timeout.tv_sec  = 0;
-+		timeout.tv_usec = 1000 * TIMEOUT_INTERVAL;
-+		select(0, NULL, NULL, NULL, &timeout);
-+#endif
-+		if (SCTP_BASE_VAR(timer_thread_should_exit)) {
-+			break;
-+		}
-+		sctp_handle_tick(MSEC_TO_TICKS(TIMEOUT_INTERVAL));
-+	}
-+	return (NULL);
- }
-+
-+void
-+sctp_start_timer(void)
-+{
-+	/*
-+	 * No need to do SCTP_TIMERQ_LOCK_INIT();
-+	 * here, it is being done in sctp_pcb_init()
-+	 */
-+#if defined (__Userspace_os_Windows)
-+	if ((SCTP_BASE_VAR(timer_thread) = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)user_sctp_timer_iterate, NULL, 0, NULL)) == NULL) {
-+		SCTP_PRINTF("ERROR; Creating ithread failed\n");
-+	}
-+#else
-+	int rc;
-+
-+	rc = pthread_create(&SCTP_BASE_VAR(timer_thread), NULL, user_sctp_timer_iterate, NULL);
-+	if (rc) {
-+		SCTP_PRINTF("ERROR; return code from pthread_create() is %d\n", rc);
-+	}
-+#endif
-+}
-+
-+#endif
-	Modified   netwerk/sctp/src/netinet/sctp_callout.h
-diff --git a/netwerk/sctp/src/netinet/sctp_callout.h b/netwerk/sctp/src/netinet/sctp_callout.h
-index 2782945..c53c5a4 100755
---- a/netwerk/sctp/src/netinet/sctp_callout.h
-+++ b/netwerk/sctp/src/netinet/sctp_callout.h
-@@ -64,7 +64,6 @@ __FBSDID("$FreeBSD$");
- #endif
- 
- extern int ticks;
--extern void sctp_start_timer();
- #endif
- 
- TAILQ_HEAD(calloutlist, sctp_callout);
-@@ -94,6 +93,11 @@ int sctp_os_timer_stop(sctp_os_timer_t *);
- #define	SCTP_OS_TIMER_ACTIVE(tmr) ((tmr)->c_flags & SCTP_CALLOUT_ACTIVE)
- #define	SCTP_OS_TIMER_DEACTIVATE(tmr) ((tmr)->c_flags &= ~SCTP_CALLOUT_ACTIVE)
- 
-+#if defined(__Userspace__)
-+void sctp_start_timer(void);
-+#endif
-+#if defined(__APPLE__)
- void sctp_timeout(void *);
-+#endif
- 
- #endif
-	Modified   netwerk/sctp/src/netinet/sctp_usrreq.c
-diff --git a/netwerk/sctp/src/netinet/sctp_usrreq.c b/netwerk/sctp/src/netinet/sctp_usrreq.c
-index d4115ad..c17ea04 100755
---- a/netwerk/sctp/src/netinet/sctp_usrreq.c
-+++ b/netwerk/sctp/src/netinet/sctp_usrreq.c
-@@ -56,6 +56,9 @@ __FBSDID("$FreeBSD: head/sys/netinet/sctp_usrreq.c 259943 2013-12-27 13:07:00Z t
- #include <netinet/sctp_timer.h>
- #include <netinet/sctp_auth.h>
- #include <netinet/sctp_bsd_addr.h>
-+#if defined(__Userspace__)
-+#include <netinet/sctp_callout.h>
-+#endif
- #if !defined(__Userspace_os_Windows)
- #include <netinet/udp.h>
- #endif
-	Deleted    netwerk/sctp/src/user_sctp_timer_iterate.c
-diff --git a/netwerk/sctp/src/user_sctp_timer_iterate.c b/netwerk/sctp/src/user_sctp_timer_iterate.c
-deleted file mode 100755
-index 0a9dbce..0000000
---- a/netwerk/sctp/src/user_sctp_timer_iterate.c
-+++ /dev/null
-@@ -1,119 +0,0 @@
--/*-
-- * Copyright (c) 2012 Michael Tuexen
-- * All rights reserved.
-- *
-- * Redistribution and use in source and binary forms, with or without
-- * modification, are permitted provided that the following conditions
-- * are met:
-- * 1. Redistributions of source code must retain the above copyright
-- *    notice, this list of conditions and the following disclaimer.
-- * 2. Redistributions in binary form must reproduce the above copyright
-- *    notice, this list of conditions and the following disclaimer in the
-- *    documentation and/or other materials provided with the distribution.
-- *
-- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-- * SUCH DAMAGE.
-- *
-- */
--
--#include <sys/types.h>
--#if !defined (__Userspace_os_Windows)
--#include <sys/wait.h>
--#include <unistd.h>
--#include <pthread.h>
--#endif
--#include <stdlib.h>
--#include <string.h>
--#include <stdio.h>
--#include <errno.h>
--#include <netinet/sctp_pcb.h>
--#include <netinet/sctp_sysctl.h>
--#include "netinet/sctp_callout.h"
--
--/* This is the polling time of callqueue in milliseconds
-- * 10ms seems to work well. 1ms was giving erratic behavior
-- */
--#define TIMEOUT_INTERVAL 10
--
--extern int ticks;
--
--void *
--user_sctp_timer_iterate(void *arg)
--{
--	sctp_os_timer_t *c;
--	void (*c_func)(void *);
--	void *c_arg;
--	sctp_os_timer_t *sctp_os_timer_next;
--	/*
--	 * The MSEC_TO_TICKS conversion depends on hz. The to_ticks in
--	 * sctp_os_timer_start also depends on hz. E.g. if hz=1000 then
--	 * for multiple INIT the to_ticks is 2000, 4000, 8000, 16000, 32000, 60000
--	 * and further to_ticks level off at 60000 i.e. 60 seconds.
--	 * If hz=100 then for multiple INIT the to_ticks are 200, 400, 800 and so-on.
--	 */
--	for (;;) {
--#if defined (__Userspace_os_Windows)
--		Sleep(TIMEOUT_INTERVAL);
--#else
--		struct timeval timeout;
--
--		timeout.tv_sec  = 0;
--		timeout.tv_usec = 1000 * TIMEOUT_INTERVAL;
--		select(0, NULL, NULL, NULL, &timeout);
--#endif
--		if (SCTP_BASE_VAR(timer_thread_should_exit)) {
--			break;
--		}
--		SCTP_TIMERQ_LOCK();
--		/* update our tick count */
--		ticks += MSEC_TO_TICKS(TIMEOUT_INTERVAL);
--		c = TAILQ_FIRST(&SCTP_BASE_INFO(callqueue));
--		while (c) {
--			if (c->c_time <= ticks) {
--				sctp_os_timer_next = TAILQ_NEXT(c, tqe);
--				TAILQ_REMOVE(&SCTP_BASE_INFO(callqueue), c, tqe);
--				c_func = c->c_func;
--				c_arg = c->c_arg;
--				c->c_flags &= ~SCTP_CALLOUT_PENDING;
--				SCTP_TIMERQ_UNLOCK();
--				c_func(c_arg);
--				SCTP_TIMERQ_LOCK();
--				c = sctp_os_timer_next;
--			} else {
--				c = TAILQ_NEXT(c, tqe);
--			}
--		}
--		SCTP_TIMERQ_UNLOCK();
--	}
--	return (NULL);
--}
--
--void
--sctp_start_timer(void)
--{
--	/*
--	 * No need to do SCTP_TIMERQ_LOCK_INIT();
--	 * here, it is being done in sctp_pcb_init()
--	 */
--#if defined (__Userspace_os_Windows)
--	if ((SCTP_BASE_VAR(timer_thread) = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)user_sctp_timer_iterate, NULL, 0, NULL)) == NULL) {
--		SCTP_PRINTF("ERROR; Creating ithread failed\n");
--	}
--#else
--	int rc;
--
--	rc = pthread_create(&SCTP_BASE_VAR(timer_thread), NULL, user_sctp_timer_iterate, NULL);
--	if (rc) {
--		SCTP_PRINTF("ERROR; return code from pthread_create() is %d\n", rc);
--	}
--#endif
--}
diff --git a/gnu/packages/patches/icecat-CVE-2014-1587-bug-1089207.patch b/gnu/packages/patches/icecat-CVE-2014-1587-bug-1089207.patch
deleted file mode 100644
index cd5602c86b..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-1587-bug-1089207.patch
+++ /dev/null
@@ -1,119 +0,0 @@
-commit 9df10fea93b483af6646ef2f7aab35598fbaab2f
-Author: Nils Ohlmeier [:drno] <drno@ohlmeier.org>
-Date:   Thu Nov 6 12:21:57 2014 -0500
-
-    Bug 1089207: fix parsing of invalid fmtp att r=drno,jesup a=lmandel
-
-	Modified   media/webrtc/signaling/src/sipcc/core/sdp/sdp_attr.c
-diff --git a/media/webrtc/signaling/src/sipcc/core/sdp/sdp_attr.c b/media/webrtc/signaling/src/sipcc/core/sdp/sdp_attr.c
-index fa5ca2e..33d26c0 100644
---- a/media/webrtc/signaling/src/sipcc/core/sdp/sdp_attr.c
-+++ b/media/webrtc/signaling/src/sipcc/core/sdp/sdp_attr.c
-@@ -458,7 +458,6 @@ sdp_result_e sdp_parse_attr_fmtp (sdp_t *sdp_p, sdp_attr_t *attr_p,
-     char          tmp[SDP_MAX_STRING_LEN];
-     char          *src_ptr;
-     char          *temp_ptr = NULL;
--    tinybool flag=FALSE;
-     char         *tok=NULL;
-     char         *temp=NULL;
-     u16          custom_x=0;
-@@ -495,29 +494,11 @@ sdp_result_e sdp_parse_attr_fmtp (sdp_t *sdp_p, sdp_attr_t *attr_p,
-     fmtp_p->packetization_mode = 0;
-     fmtp_p->level_asymmetry_allowed = SDP_DEFAULT_LEVEL_ASYMMETRY_ALLOWED_VALUE;
- 
--    /* BEGIN - a typical macro fn to replace '/' with ';' from fmtp line*/
--    /* This ugly replacement of '/' with ';' is only done because
--    *  econf/MS client sends in this wierd /illegal format.
--    * fmtp parameters MUST be  separated by ';'
--    */
-     temp_ptr = cpr_strdup(ptr);
-     if (temp_ptr == NULL) {
-         return (SDP_FAILURE);
-     }
-     fmtp_ptr = src_ptr = temp_ptr;
--    while (flag == FALSE) {
--        if (*src_ptr == '\n') {
--            flag = TRUE;
--            break;
--        }
--        if (*src_ptr == '/') {
--            *src_ptr =';' ;
--        }
--        src_ptr++;
--    }
--    /* END */
--    /* Once we move to RFC compliant video codec implementations, the above
--    *  patch should be removed */
- 
-     src_ptr = temp_ptr;
-     while (!done) {
-	Modified   media/webrtc/signaling/src/sipcc/core/sdp/sdp_main.c
-diff --git a/media/webrtc/signaling/src/sipcc/core/sdp/sdp_main.c b/media/webrtc/signaling/src/sipcc/core/sdp/sdp_main.c
-index 0be02aa..9760d4e 100644
---- a/media/webrtc/signaling/src/sipcc/core/sdp/sdp_main.c
-+++ b/media/webrtc/signaling/src/sipcc/core/sdp/sdp_main.c
-@@ -1002,7 +1002,12 @@ sdp_result_e sdp_parse (sdp_t *sdp_p, char **bufp, u16 len)
-          */
-         ptr = next_ptr;
-         line_end = sdp_findchar(ptr, "\n");
--        if (line_end >= (*bufp + len)) {
-+        if ((line_end >= (*bufp + len)) ||
-+           (*line_end == '\0')) {
-+            /* As this does not update the result value the SDP up to this point
-+             * is still accept as valid. So encountering this is not treated as
-+             * an error.
-+             */
-             sdp_parse_error(sdp_p->peerconnection,
-                 "%s End of line beyond end of buffer.",
-                 sdp_p->debug_str);
-	Modified   media/webrtc/signaling/test/sdp_unittests.cpp
-diff --git a/media/webrtc/signaling/test/sdp_unittests.cpp b/media/webrtc/signaling/test/sdp_unittests.cpp
-index 51df09b..9f98eed 100644
---- a/media/webrtc/signaling/test/sdp_unittests.cpp
-+++ b/media/webrtc/signaling/test/sdp_unittests.cpp
-@@ -755,13 +755,13 @@ TEST_F(SdpTest, parseFmtpMaxFs) {
-   u32 val = 0;
-   ParseSdp(kVideoSdp + "a=fmtp:120 max-fs=300;max-fr=30\r\n");
-   ASSERT_EQ(sdp_attr_get_fmtp_max_fs(sdp_ptr_, 1, 0, 1, &val), SDP_SUCCESS);
--  ASSERT_EQ(val, 300);
-+  ASSERT_EQ(val, 300U);
- }
- TEST_F(SdpTest, parseFmtpMaxFr) {
-   u32 val = 0;
-   ParseSdp(kVideoSdp + "a=fmtp:120 max-fs=300;max-fr=30\r\n");
-   ASSERT_EQ(sdp_attr_get_fmtp_max_fr(sdp_ptr_, 1, 0, 1, &val), SDP_SUCCESS);
--  ASSERT_EQ(val, 30);
-+  ASSERT_EQ(val, 30U);
- }
- 
- TEST_F(SdpTest, addFmtpMaxFs) {
-@@ -789,6 +789,29 @@ TEST_F(SdpTest, addFmtpMaxFsFr) {
-             std::string::npos);
- }
- 
-+static const std::string kBrokenFmtp =
-+  "v=0\r\n"
-+  "o=- 137331303 2 IN IP4 127.0.0.1\r\n"
-+  "s=SIP Call\r\n"
-+  "t=0 0\r\n"
-+  "m=video 56436 RTP/SAVPF 120\r\n"
-+  "c=IN IP4 198.51.100.7\r\n"
-+  "a=rtpmap:120 VP8/90000\r\n"
-+  /* Note: the \0 in this string triggered bz://1089207
-+   */
-+  "a=fmtp:120 max-fs=300;max\0fr=30";
-+
-+TEST_F(SdpTest, parseBrokenFmtp) {
-+  u32 val = 0;
-+  char *buf = const_cast<char *>(kBrokenFmtp.data());
-+  ResetSdp();
-+  /* We need to manually invoke the parser here to be able to specify the length
-+   * of the string beyond the \0 in last line of the string.
-+   */
-+  ASSERT_EQ(sdp_parse(sdp_ptr_, &buf, 165), SDP_SUCCESS);
-+  ASSERT_EQ(sdp_attr_get_fmtp_max_fs(sdp_ptr_, 1, 0, 1, &val), SDP_INVALID_PARAMETER);
-+}
-+
- } // End namespace test.
- 
- int main(int argc, char **argv) {
diff --git a/gnu/packages/patches/icecat-CVE-2014-1590.patch b/gnu/packages/patches/icecat-CVE-2014-1590.patch
deleted file mode 100644
index f8513980ad..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-1590.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-commit 50c5ca4bacf7cda77c3a7ab1b8d82ded18fb3355
-Author: Olli Pettay <Olli.Pettay@helsinki.fi>
-Date:   Sun Nov 2 22:01:55 2014 +0200
-
-    Bug 1087633 - Filter out XPConnect wrapped input streams. r=bz, a=lmandel
-
-	Modified   content/base/src/nsXMLHttpRequest.h
-diff --git a/content/base/src/nsXMLHttpRequest.h b/content/base/src/nsXMLHttpRequest.h
-index b1fc4e3..4ab4f29 100644
---- a/content/base/src/nsXMLHttpRequest.h
-+++ b/content/base/src/nsXMLHttpRequest.h
-@@ -28,7 +28,8 @@
- #include "nsIPrincipal.h"
- #include "nsIScriptObjectPrincipal.h"
- #include "nsISizeOfEventTarget.h"
--
-+#include "nsIXPConnect.h"
-+#include "nsIInputStream.h"
- #include "mozilla/Assertions.h"
- #include "mozilla/DOMEventTargetHelper.h"
- #include "mozilla/MemoryReporting.h"
-@@ -446,6 +447,11 @@ public:
-   void Send(nsIInputStream* aStream, ErrorResult& aRv)
-   {
-     NS_ASSERTION(aStream, "Null should go to string version");
-+    nsCOMPtr<nsIXPConnectWrappedJS> wjs = do_QueryInterface(aStream);
-+    if (wjs) {
-+      aRv.Throw(NS_ERROR_DOM_TYPE_ERR);
-+      return;
-+    }
-     aRv = Send(RequestBody(aStream));
-   }
-   void SendAsBinary(const nsAString& aBody, ErrorResult& aRv);
diff --git a/gnu/packages/patches/icecat-CVE-2014-1592.patch b/gnu/packages/patches/icecat-CVE-2014-1592.patch
deleted file mode 100644
index 6de1b6fe4a..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-1592.patch
+++ /dev/null
@@ -1,400 +0,0 @@
-commit 7efadbb03cdffa11ebfc2da3113377d2f33b893b
-Author: Henri Sivonen <hsivonen@hsivonen.fi>
-Date:   Mon Nov 3 15:23:26 2014 +0200
-
-    Bug 1088635. r=smaug, a=bkerensa
-
-	Modified   content/base/src/nsDocument.cpp
-diff --git a/content/base/src/nsDocument.cpp b/content/base/src/nsDocument.cpp
-index cbed38d..3493bce 100644
---- a/content/base/src/nsDocument.cpp
-+++ b/content/base/src/nsDocument.cpp
-@@ -3916,7 +3916,7 @@ nsDocument::InsertChildAt(nsIContent* aKid, uint32_t aIndex,
-                           bool aNotify)
- {
-   if (aKid->IsElement() && GetRootElement()) {
--    NS_ERROR("Inserting element child when we already have one");
-+    NS_WARNING("Inserting root element when we already have one");
-     return NS_ERROR_DOM_HIERARCHY_REQUEST_ERR;
-   }
- 
-	Modified   parser/html/nsHtml5Parser.cpp
-diff --git a/parser/html/nsHtml5Parser.cpp b/parser/html/nsHtml5Parser.cpp
-index a485be4..f28adb4 100644
---- a/parser/html/nsHtml5Parser.cpp
-+++ b/parser/html/nsHtml5Parser.cpp
-@@ -237,7 +237,8 @@ nsHtml5Parser::Parse(const nsAString& aSourceBuffer,
-      * WillBuildModel to be called before the document has had its 
-      * script global object set.
-      */
--    mExecutor->WillBuildModel(eDTDMode_unknown);
-+    rv = mExecutor->WillBuildModel(eDTDMode_unknown);
-+    NS_ENSURE_SUCCESS(rv, rv);
-   }
- 
-   // Return early if the parser has processed EOF
-@@ -255,7 +256,7 @@ nsHtml5Parser::Parse(const nsAString& aSourceBuffer,
-     }
-     mDocumentClosed = true;
-     if (!mBlocked && !mInDocumentWrite) {
--      ParseUntilBlocked();
-+      return ParseUntilBlocked();
-     }
-     return NS_OK;
-   }
-@@ -378,7 +379,8 @@ nsHtml5Parser::Parse(const nsAString& aSourceBuffer,
- 
-       if (mTreeBuilder->HasScript()) {
-         mTreeBuilder->Flush(); // Move ops to the executor
--        mExecutor->FlushDocumentWrite(); // run the ops
-+        rv = mExecutor->FlushDocumentWrite(); // run the ops
-+        NS_ENSURE_SUCCESS(rv, rv);
-         // Flushing tree ops can cause all sorts of things.
-         // Return early if the parser got terminated.
-         if (mExecutor->IsComplete()) {
-@@ -437,7 +439,8 @@ nsHtml5Parser::Parse(const nsAString& aSourceBuffer,
-       "Buffer wasn't tokenized to completion?");
-     // Scripting semantics require a forced tree builder flush here
-     mTreeBuilder->Flush(); // Move ops to the executor
--    mExecutor->FlushDocumentWrite(); // run the ops
-+    rv = mExecutor->FlushDocumentWrite(); // run the ops
-+    NS_ENSURE_SUCCESS(rv, rv);
-   } else if (stackBuffer.hasMore()) {
-     // The buffer wasn't tokenized to completion. Tokenize the untokenized
-     // content in order to preload stuff. This content will be retokenized
-@@ -594,11 +597,13 @@ nsHtml5Parser::IsScriptCreated()
- /* End nsIParser  */
- 
- // not from interface
--void
-+nsresult
- nsHtml5Parser::ParseUntilBlocked()
- {
--  if (mBlocked || mExecutor->IsComplete() || NS_FAILED(mExecutor->IsBroken())) {
--    return;
-+  nsresult rv = mExecutor->IsBroken();
-+  NS_ENSURE_SUCCESS(rv, rv);
-+  if (mBlocked || mExecutor->IsComplete()) {
-+    return NS_OK;
-   }
-   NS_ASSERTION(mExecutor->HasStarted(), "Bad life cycle.");
-   NS_ASSERTION(!mInDocumentWrite,
-@@ -611,7 +616,7 @@ nsHtml5Parser::ParseUntilBlocked()
-       if (mFirstBuffer == mLastBuffer) {
-         if (mExecutor->IsComplete()) {
-           // something like cache manisfests stopped the parse in mid-flight
--          return;
-+          return NS_OK;
-         }
-         if (mDocumentClosed) {
-           NS_ASSERTION(!GetStreamParser(),
-@@ -620,8 +625,10 @@ nsHtml5Parser::ParseUntilBlocked()
-           mTreeBuilder->StreamEnded();
-           mTreeBuilder->Flush();
-           mExecutor->FlushDocumentWrite();
-+          // The below call does memory cleanup, so call it even if the
-+          // parser has been marked as broken.
-           mTokenizer->end();
--          return;            
-+          return NS_OK;
-         }
-         // never release the last buffer.
-         NS_ASSERTION(!mLastBuffer->getStart() && !mLastBuffer->getEnd(),
-@@ -643,14 +650,14 @@ nsHtml5Parser::ParseUntilBlocked()
-           NS_ASSERTION(mExecutor->IsInFlushLoop(),
-               "How did we come here without being in the flush loop?");
-         }
--        return; // no more data for now but expecting more
-+        return NS_OK; // no more data for now but expecting more
-       }
-       mFirstBuffer = mFirstBuffer->next;
-       continue;
-     }
- 
-     if (mBlocked || mExecutor->IsComplete()) {
--      return;
-+      return NS_OK;
-     }
- 
-     // now we have a non-empty buffer
-@@ -667,10 +674,11 @@ nsHtml5Parser::ParseUntilBlocked()
-       }
-       if (mTreeBuilder->HasScript()) {
-         mTreeBuilder->Flush();
--        mExecutor->FlushDocumentWrite();
-+        nsresult rv = mExecutor->FlushDocumentWrite();
-+        NS_ENSURE_SUCCESS(rv, rv);
-       }
-       if (mBlocked) {
--        return;
-+        return NS_OK;
-       }
-     }
-     continue;
-	Modified   parser/html/nsHtml5Parser.h
-diff --git a/parser/html/nsHtml5Parser.h b/parser/html/nsHtml5Parser.h
-index aff79c7..e2ef2f8 100644
---- a/parser/html/nsHtml5Parser.h
-+++ b/parser/html/nsHtml5Parser.h
-@@ -262,7 +262,7 @@ class nsHtml5Parser : public nsIParser,
-     /**
-      * Parse until pending data is exhausted or a script blocks the parser
-      */
--    void ParseUntilBlocked();
-+    nsresult ParseUntilBlocked();
- 
-   private:
- 
-	Modified   parser/html/nsHtml5StreamParser.cpp
-diff --git a/parser/html/nsHtml5StreamParser.cpp b/parser/html/nsHtml5StreamParser.cpp
-index 4790568..7e3917b 100644
---- a/parser/html/nsHtml5StreamParser.cpp
-+++ b/parser/html/nsHtml5StreamParser.cpp
-@@ -796,7 +796,7 @@ nsHtml5StreamParser::WriteStreamBytes(const uint8_t* aFromSegment,
-   // NS_HTML5_STREAM_PARSER_READ_BUFFER_SIZE.
-   if (!mLastBuffer) {
-     NS_WARNING("mLastBuffer should not be null!");
--    MarkAsBroken();
-+    MarkAsBroken(NS_ERROR_NULL_POINTER);
-     return NS_ERROR_NULL_POINTER;
-   }
-   if (mLastBuffer->getEnd() == NS_HTML5_STREAM_PARSER_READ_BUFFER_SIZE) {
-@@ -902,7 +902,8 @@ nsHtml5StreamParser::OnStartRequest(nsIRequest* aRequest, nsISupports* aContext)
-    * WillBuildModel to be called before the document has had its 
-    * script global object set.
-    */
--  mExecutor->WillBuildModel(eDTDMode_unknown);
-+  rv = mExecutor->WillBuildModel(eDTDMode_unknown);
-+  NS_ENSURE_SUCCESS(rv, rv);
-   
-   nsRefPtr<nsHtml5OwningUTF16Buffer> newBuf =
-     nsHtml5OwningUTF16Buffer::FalliblyCreate(
-@@ -1003,8 +1004,9 @@ nsHtml5StreamParser::DoStopRequest()
- 
-   if (!mUnicodeDecoder) {
-     uint32_t writeCount;
--    if (NS_FAILED(FinalizeSniffing(nullptr, 0, &writeCount, 0))) {
--      MarkAsBroken();
-+    nsresult rv;
-+    if (NS_FAILED(rv = FinalizeSniffing(nullptr, 0, &writeCount, 0))) {
-+      MarkAsBroken(rv);
-       return;
-     }
-   } else if (mFeedChardet) {
-@@ -1076,7 +1078,7 @@ nsHtml5StreamParser::DoDataAvailable(const uint8_t* aBuffer, uint32_t aLength)
-     rv = SniffStreamBytes(aBuffer, aLength, &writeCount);
-   }
-   if (NS_FAILED(rv)) {
--    MarkAsBroken();
-+    MarkAsBroken(rv);
-     return;
-   }
-   NS_ASSERTION(writeCount == aLength, "Wrong number of stream bytes written/sniffed.");
-@@ -1662,13 +1664,13 @@ nsHtml5StreamParser::TimerFlush()
- }
- 
- void
--nsHtml5StreamParser::MarkAsBroken()
-+nsHtml5StreamParser::MarkAsBroken(nsresult aRv)
- {
-   NS_ASSERTION(IsParserThread(), "Wrong thread!");
-   mTokenizerMutex.AssertCurrentThreadOwns();
- 
-   Terminate();
--  mTreeBuilder->MarkAsBroken();
-+  mTreeBuilder->MarkAsBroken(aRv);
-   mozilla::DebugOnly<bool> hadOps = mTreeBuilder->Flush(false);
-   NS_ASSERTION(hadOps, "Should have had the markAsBroken op!");
-   if (NS_FAILED(NS_DispatchToMainThread(mExecutorFlusher))) {
-	Modified   parser/html/nsHtml5StreamParser.h
-diff --git a/parser/html/nsHtml5StreamParser.h b/parser/html/nsHtml5StreamParser.h
-index c7dcbbe..476ef16 100644
---- a/parser/html/nsHtml5StreamParser.h
-+++ b/parser/html/nsHtml5StreamParser.h
-@@ -218,7 +218,7 @@ class nsHtml5StreamParser : public nsICharsetDetectionObserver {
-     }
- #endif
- 
--    void MarkAsBroken();
-+    void MarkAsBroken(nsresult aRv);
- 
-     /**
-      * Marks the stream parser as interrupted. If you ever add calls to this
-	Modified   parser/html/nsHtml5TreeBuilderCppSupplement.h
-diff --git a/parser/html/nsHtml5TreeBuilderCppSupplement.h b/parser/html/nsHtml5TreeBuilderCppSupplement.h
-index 4cd5c7c..1e65394 100644
---- a/parser/html/nsHtml5TreeBuilderCppSupplement.h
-+++ b/parser/html/nsHtml5TreeBuilderCppSupplement.h
-@@ -949,14 +949,14 @@ nsHtml5TreeBuilder::DropHandles()
- }
- 
- void
--nsHtml5TreeBuilder::MarkAsBroken()
-+nsHtml5TreeBuilder::MarkAsBroken(nsresult aRv)
- {
-   if (MOZ_UNLIKELY(mBuilder)) {
-     MOZ_ASSUME_UNREACHABLE("Must not call this with builder.");
-     return;
-   }
-   mOpQueue.Clear(); // Previous ops don't matter anymore
--  mOpQueue.AppendElement()->Init(eTreeOpMarkAsBroken);
-+  mOpQueue.AppendElement()->Init(aRv);
- }
- 
- void
-	Modified   parser/html/nsHtml5TreeBuilderHSupplement.h
-diff --git a/parser/html/nsHtml5TreeBuilderHSupplement.h b/parser/html/nsHtml5TreeBuilderHSupplement.h
-index a321e80..8d380eb 100644
---- a/parser/html/nsHtml5TreeBuilderHSupplement.h
-+++ b/parser/html/nsHtml5TreeBuilderHSupplement.h
-@@ -223,4 +223,4 @@
- 
-     void errEndWithUnclosedElements(nsIAtom* aName);
- 
--    void MarkAsBroken();
-+    void MarkAsBroken(nsresult aRv);
-	Modified   parser/html/nsHtml5TreeOpExecutor.cpp
-diff --git a/parser/html/nsHtml5TreeOpExecutor.cpp b/parser/html/nsHtml5TreeOpExecutor.cpp
-index ebcafca..6c52e5f 100644
---- a/parser/html/nsHtml5TreeOpExecutor.cpp
-+++ b/parser/html/nsHtml5TreeOpExecutor.cpp
-@@ -411,7 +411,11 @@ nsHtml5TreeOpExecutor::RunFlushLoop()
-         GetParser()->GetStreamParser();
-       // Now parse content left in the document.write() buffer queue if any.
-       // This may generate tree ops on its own or dequeue a speculation.
--      GetParser()->ParseUntilBlocked();
-+      nsresult rv = GetParser()->ParseUntilBlocked();
-+      if (NS_FAILED(rv)) {
-+        MarkAsBroken(rv);
-+        return;
-+      }
-     }
- 
-     if (mOpQueue.IsEmpty()) {
-@@ -496,21 +500,24 @@ nsHtml5TreeOpExecutor::RunFlushLoop()
-   }
- }
- 
--void
-+nsresult
- nsHtml5TreeOpExecutor::FlushDocumentWrite()
- {
-+  nsresult rv = IsBroken();
-+  NS_ENSURE_SUCCESS(rv, rv);
-+
-   FlushSpeculativeLoads(); // Make sure speculative loads never start after the
-                 // corresponding normal loads for the same URLs.
- 
-   if (MOZ_UNLIKELY(!mParser)) {
-     // The parse has ended.
-     mOpQueue.Clear(); // clear in order to be able to assert in destructor
--    return;
-+    return rv;
-   }
-   
-   if (mFlushState != eNotFlushing) {
-     // XXX Can this happen? In case it can, let's avoid crashing.
--    return;
-+    return rv;
-   }
- 
-   mFlushState = eInFlush;
-@@ -545,7 +552,7 @@ nsHtml5TreeOpExecutor::FlushDocumentWrite()
-     }
-     NS_ASSERTION(mFlushState == eInDocUpdate, 
-       "Tried to perform tree op outside update batch.");
--    nsresult rv = iter->Perform(this, &scriptElement);
-+    rv = iter->Perform(this, &scriptElement);
-     if (NS_FAILED(rv)) {
-       MarkAsBroken(rv);
-       break;
-@@ -560,13 +567,14 @@ nsHtml5TreeOpExecutor::FlushDocumentWrite()
- 
-   if (MOZ_UNLIKELY(!mParser)) {
-     // Ending the doc update caused a call to nsIParser::Terminate().
--    return;
-+    return rv;
-   }
- 
-   if (scriptElement) {
-     // must be tail call when mFlushState is eNotFlushing
-     RunScript(scriptElement);
-   }
-+  return rv;
- }
- 
- // copied from HTML content sink
-	Modified   parser/html/nsHtml5TreeOpExecutor.h
-diff --git a/parser/html/nsHtml5TreeOpExecutor.h b/parser/html/nsHtml5TreeOpExecutor.h
-index 9617dcb..1f81448 100644
---- a/parser/html/nsHtml5TreeOpExecutor.h
-+++ b/parser/html/nsHtml5TreeOpExecutor.h
-@@ -173,7 +173,7 @@ class nsHtml5TreeOpExecutor : public nsHtml5DocumentBuilder,
-                   
-     void RunFlushLoop();
- 
--    void FlushDocumentWrite();
-+    nsresult FlushDocumentWrite();
- 
-     void MaybeSuspend();
- 
-	Modified   parser/html/nsHtml5TreeOperation.cpp
-diff --git a/parser/html/nsHtml5TreeOperation.cpp b/parser/html/nsHtml5TreeOperation.cpp
-index 48b71dc..7ad65247 100644
---- a/parser/html/nsHtml5TreeOperation.cpp
-+++ b/parser/html/nsHtml5TreeOperation.cpp
-@@ -214,6 +214,9 @@ nsHtml5TreeOperation::AppendToDocument(nsIContent* aNode,
-   nsIDocument* doc = aBuilder->GetDocument();
-   uint32_t childCount = doc->GetChildCount();
-   rv = doc->AppendChildTo(aNode, false);
-+  if (rv == NS_ERROR_DOM_HIERARCHY_REQUEST_ERR) {
-+    return NS_OK;
-+  }
-   NS_ENSURE_SUCCESS(rv, rv);
-   nsNodeUtils::ContentInserted(doc, aNode, childCount);
- 
-@@ -739,8 +742,7 @@ nsHtml5TreeOperation::Perform(nsHtml5TreeOpExecutor* aBuilder,
-       return NS_OK;
-     }
-     case eTreeOpMarkAsBroken: {
--      aBuilder->MarkAsBroken(NS_ERROR_OUT_OF_MEMORY);
--      return NS_OK;
-+      return mOne.result;
-     }
-     case eTreeOpRunScript: {
-       nsIContent* node = *(mOne.node);
-	Modified   parser/html/nsHtml5TreeOperation.h
-diff --git a/parser/html/nsHtml5TreeOperation.h b/parser/html/nsHtml5TreeOperation.h
-index 2727733..06d0274 100644
---- a/parser/html/nsHtml5TreeOperation.h
-+++ b/parser/html/nsHtml5TreeOperation.h
-@@ -435,6 +435,15 @@ class nsHtml5TreeOperation {
-       mFour.integer = aInt;
-     }
- 
-+    inline void Init(nsresult aRv)
-+    {
-+      NS_PRECONDITION(mOpCode == eTreeOpUninitialized,
-+        "Op code must be uninitialized when initializing.");
-+      NS_PRECONDITION(NS_FAILED(aRv), "Initialized tree op with non-failure.");
-+      mOpCode = eTreeOpMarkAsBroken;
-+      mOne.result = aRv;
-+    }
-+
-     inline void InitAddClass(nsIContentHandle* aNode, const char16_t* aClass)
-     {
-       NS_PRECONDITION(mOpCode == eTreeOpUninitialized,
-@@ -487,11 +496,12 @@ class nsHtml5TreeOperation {
-       nsIAtom*                        atom;
-       nsHtml5HtmlAttributes*          attributes;
-       nsHtml5DocumentMode             mode;
--      char16_t*                      unicharPtr;
-+      char16_t*                       unicharPtr;
-       char*                           charPtr;
-       nsHtml5TreeOperationStringPair* stringPair;
-       nsAHtml5TreeBuilderState*       state;
-       int32_t                         integer;
-+      nsresult                        result;
-     }                   mOne, mTwo, mThree, mFour;
- };
- 
diff --git a/gnu/packages/patches/icecat-CVE-2014-1593.patch b/gnu/packages/patches/icecat-CVE-2014-1593.patch
deleted file mode 100644
index 446920a95f..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-1593.patch
+++ /dev/null
@@ -1,154 +0,0 @@
-commit a58cea744ac5b93b99a66554e1029b2c7aa3255d
-Author: Matthew Gregan <kinetik@flim.org>
-Date:   Tue Nov 11 08:58:52 2014 +1300
-
-    Bug 1085175. r=roc, a=dveditz
-
-	Modified   content/media/MediaCache.cpp
-diff --git a/content/media/MediaCache.cpp b/content/media/MediaCache.cpp
-index 598d905..c99f724 100644
---- a/content/media/MediaCache.cpp
-+++ b/content/media/MediaCache.cpp
-@@ -1174,6 +1174,7 @@ MediaCache::Update()
-       // Figure out where we should be reading from. It's the first
-       // uncached byte after the current mStreamOffset.
-       int64_t dataOffset = stream->GetCachedDataEndInternal(stream->mStreamOffset);
-+      MOZ_ASSERT(dataOffset >= 0);
- 
-       // Compute where we'd actually seek to to read at readOffset
-       int64_t desiredOffset = dataOffset;
-@@ -1702,6 +1703,7 @@ MediaCacheStream::NotifyDataStarted(int64_t aOffset)
-   ReentrantMonitorAutoEnter mon(gMediaCache->GetReentrantMonitor());
-   NS_WARN_IF_FALSE(aOffset == mChannelOffset,
-                    "Server is giving us unexpected offset");
-+  MOZ_ASSERT(aOffset >= 0);
-   mChannelOffset = aOffset;
-   if (mStreamLength >= 0) {
-     // If we started reading at a certain offset, then for sure
-@@ -2118,23 +2120,28 @@ MediaCacheStream::Seek(int32_t aWhence, int64_t aOffset)
-     return NS_ERROR_FAILURE;
- 
-   int64_t oldOffset = mStreamOffset;
-+  int64_t newOffset = mStreamOffset;
-   switch (aWhence) {
-   case PR_SEEK_END:
-     if (mStreamLength < 0)
-       return NS_ERROR_FAILURE;
--    mStreamOffset = mStreamLength + aOffset;
-+    newOffset = mStreamLength + aOffset;
-     break;
-   case PR_SEEK_CUR:
--    mStreamOffset += aOffset;
-+    newOffset += aOffset;
-     break;
-   case PR_SEEK_SET:
--    mStreamOffset = aOffset;
-+    newOffset = aOffset;
-     break;
-   default:
-     NS_ERROR("Unknown whence");
-     return NS_ERROR_FAILURE;
-   }
- 
-+  if (newOffset < 0)
-+    return NS_ERROR_FAILURE;
-+  mStreamOffset = newOffset;
-+
-   CACHE_LOG(PR_LOG_DEBUG, ("Stream %p Seek to %lld", this, (long long)mStreamOffset));
-   gMediaCache->NoteSeek(this, oldOffset);
- 
-@@ -2176,11 +2183,10 @@ MediaCacheStream::Read(char* aBuffer, uint32_t aCount, uint32_t* aBytes)
-         break;
-       }
-       size = std::min(size, bytesRemaining);
--      // Clamp size until 64-bit file size issues (bug 500784) are fixed.
-+      // Clamp size until 64-bit file size issues are fixed.
-       size = std::min(size, int64_t(INT32_MAX));
-     }
- 
--    int32_t bytes;
-     int32_t cacheBlock = streamBlock < mBlocks.Length() ? mBlocks[streamBlock] : -1;
-     if (cacheBlock < 0) {
-       // We don't have a complete cached block here.
-@@ -2208,7 +2214,10 @@ MediaCacheStream::Read(char* aBuffer, uint32_t aCount, uint32_t* aBytes)
-         // We can just use the data in mPartialBlockBuffer. In fact we should
-         // use it rather than waiting for the block to fill and land in
-         // the cache.
--        bytes = std::min<int64_t>(size, streamWithPartialBlock->mChannelOffset - mStreamOffset);
-+        int64_t bytes = std::min<int64_t>(size, streamWithPartialBlock->mChannelOffset - mStreamOffset);
-+        // Clamp bytes until 64-bit file size issues are fixed.
-+        bytes = std::min(bytes, int64_t(INT32_MAX));
-+        NS_ABORT_IF_FALSE(bytes >= 0 && bytes <= aCount, "Bytes out of range.");
-         memcpy(aBuffer,
-           reinterpret_cast<char*>(streamWithPartialBlock->mPartialBlockBuffer.get()) + offsetInStreamBlock, bytes);
-         if (mCurrentMode == MODE_METADATA) {
-@@ -2232,6 +2241,7 @@ MediaCacheStream::Read(char* aBuffer, uint32_t aCount, uint32_t* aBytes)
-     gMediaCache->NoteBlockUsage(this, cacheBlock, mCurrentMode, TimeStamp::Now());
- 
-     int64_t offset = cacheBlock*BLOCK_SIZE + offsetInStreamBlock;
-+    int32_t bytes;
-     NS_ABORT_IF_FALSE(size >= 0 && size <= INT32_MAX, "Size out of range.");
-     nsresult rv = gMediaCache->ReadCacheFile(offset, aBuffer + count, int32_t(size), &bytes);
-     if (NS_FAILED(rv)) {
-@@ -2268,9 +2278,7 @@ MediaCacheStream::ReadAt(int64_t aOffset, char* aBuffer,
- }
- 
- nsresult
--MediaCacheStream::ReadFromCache(char* aBuffer,
--                                  int64_t aOffset,
--                                  int64_t aCount)
-+MediaCacheStream::ReadFromCache(char* aBuffer, int64_t aOffset, int64_t aCount)
- {
-   ReentrantMonitorAutoEnter mon(gMediaCache->GetReentrantMonitor());
-   if (mClosed)
-@@ -2292,7 +2300,7 @@ MediaCacheStream::ReadFromCache(char* aBuffer,
-         return NS_ERROR_FAILURE;
-       }
-       size = std::min(size, bytesRemaining);
--      // Clamp size until 64-bit file size issues (bug 500784) are fixed.
-+      // Clamp size until 64-bit file size issues are fixed.
-       size = std::min(size, int64_t(INT32_MAX));
-     }
- 
-@@ -2303,7 +2311,10 @@ MediaCacheStream::ReadFromCache(char* aBuffer,
-       // We can just use the data in mPartialBlockBuffer. In fact we should
-       // use it rather than waiting for the block to fill and land in
-       // the cache.
--      bytes = std::min<int64_t>(size, mChannelOffset - streamOffset);
-+      // Clamp bytes until 64-bit file size issues are fixed.
-+      int64_t toCopy = std::min<int64_t>(size, mChannelOffset - streamOffset);
-+      bytes = std::min(toCopy, int64_t(INT32_MAX));
-+      NS_ABORT_IF_FALSE(bytes >= 0 && bytes <= toCopy, "Bytes out of range.");
-       memcpy(aBuffer + count,
-         reinterpret_cast<char*>(mPartialBlockBuffer.get()) + offsetInStreamBlock, bytes);
-     } else {
-	Modified   media/libnestegg/include/nestegg-stdint.h
-diff --git a/media/libnestegg/include/nestegg-stdint.h b/media/libnestegg/include/nestegg-stdint.h
-index 599a7a5..c315991 100644
---- a/media/libnestegg/include/nestegg-stdint.h
-+++ b/media/libnestegg/include/nestegg-stdint.h
-@@ -1,6 +1,9 @@
- #ifdef _WIN32
- typedef __int64 int64_t;
- typedef unsigned __int64 uint64_t;
-+#if !defined(INT64_MAX)
-+#define INT64_MAX 9223372036854775807LL
-+#endif
- #else
- #include <stdint.h>
- #endif
-	Modified   media/libnestegg/src/nestegg.c
-diff --git a/media/libnestegg/src/nestegg.c b/media/libnestegg/src/nestegg.c
-index 8813cf2..56884d7 100644
---- a/media/libnestegg/src/nestegg.c
-+++ b/media/libnestegg/src/nestegg.c
-@@ -1950,6 +1950,9 @@ nestegg_offset_seek(nestegg * ctx, uint64_t offset)
- {
-   int r;
- 
-+  if (offset > INT64_MAX)
-+    return -1;
-+
-   /* Seek and set up parser state for segment-level element (Cluster). */
-   r = ne_io_seek(ctx->io, offset, NESTEGG_SEEK_SET);
-   if (r != 0)
diff --git a/gnu/packages/patches/icecat-CVE-2014-1594.patch b/gnu/packages/patches/icecat-CVE-2014-1594.patch
deleted file mode 100644
index e5ce7b069b..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-1594.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-commit 7a8497c0df722b1ed145b99a82c71ed1f7b1d6ce
-Author: Markus Stange <mstange@themasta.com>
-Date:   Thu Oct 9 21:26:27 2014 -0400
-
-    Bug 1074280 - Use AsContainerLayer() in order to avoid a bad cast. r=roc, a=bkerensa
-
-	Modified   gfx/layers/basic/BasicLayerManager.cpp
-diff --git a/gfx/layers/basic/BasicLayerManager.cpp b/gfx/layers/basic/BasicLayerManager.cpp
-index 5a3a1f6..ff42bc0 100644
---- a/gfx/layers/basic/BasicLayerManager.cpp
-+++ b/gfx/layers/basic/BasicLayerManager.cpp
-@@ -901,18 +901,17 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget,
-   RenderTraceScope trace("BasicLayerManager::PaintLayer", "707070");
- 
-   const nsIntRect* clipRect = aLayer->GetEffectiveClipRect();
--  // aLayer might not be a container layer, but if so we take care not to use
--  // the container variable
--  BasicContainerLayer* container = static_cast<BasicContainerLayer*>(aLayer);
--  bool needsGroup = aLayer->GetFirstChild() &&
-+  BasicContainerLayer* container =
-+    static_cast<BasicContainerLayer*>(aLayer->AsContainerLayer());
-+  bool needsGroup = container &&
-                     container->UseIntermediateSurface();
-   BasicImplData* data = ToData(aLayer);
-   bool needsClipToVisibleRegion =
-     data->GetClipToVisibleRegion() && !aLayer->AsThebesLayer();
--  NS_ASSERTION(needsGroup || !aLayer->GetFirstChild() ||
-+  NS_ASSERTION(needsGroup || !container ||
-                container->GetOperator() == CompositionOp::OP_OVER,
-                "non-OVER operator should have forced UseIntermediateSurface");
--  NS_ASSERTION(!aLayer->GetFirstChild() || !aLayer->GetMaskLayer() ||
-+  NS_ASSERTION(!container || !aLayer->GetMaskLayer() ||
-                container->UseIntermediateSurface(),
-                "ContainerLayer with mask layer should force UseIntermediateSurface");
diff --git a/gnu/packages/patches/icecat-CVE-2014-8634-pt1.patch b/gnu/packages/patches/icecat-CVE-2014-8634-pt1.patch
deleted file mode 100644
index 3d2f81e24a..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-8634-pt1.patch
+++ /dev/null
@@ -1,410 +0,0 @@
-From 4f447768a2ff6bf37d462e033c11e20c733129ba Mon Sep 17 00:00:00 2001
-From: Jan de Mooij <jdemooij@mozilla.com>
-Date: Tue, 16 Dec 2014 22:52:51 +0100
-Subject: [PATCH] Bug 1109889 - Share more exception handling code. r=nbp,
- a=abillings
-
----
- js/src/jit/Ion.cpp                            | 11 ++++++++++-
- js/src/jit/IonMacroAssembler.cpp              |  8 ++++----
- js/src/jit/JitCompartment.h                   |  8 ++++++--
- js/src/jit/arm/MacroAssembler-arm.cpp         | 11 ++---------
- js/src/jit/arm/MacroAssembler-arm.h           |  6 ++++--
- js/src/jit/arm/Trampoline-arm.cpp             |  4 ++--
- js/src/jit/mips/MacroAssembler-mips.cpp       | 11 ++---------
- js/src/jit/mips/MacroAssembler-mips.h         |  7 +++++--
- js/src/jit/mips/Trampoline-mips.cpp           |  4 ++--
- js/src/jit/shared/MacroAssembler-x86-shared.h |  3 +++
- js/src/jit/x64/MacroAssembler-x64.cpp         | 11 ++---------
- js/src/jit/x64/MacroAssembler-x64.h           |  3 +--
- js/src/jit/x64/Trampoline-x64.cpp             |  4 ++--
- js/src/jit/x86/MacroAssembler-x86.cpp         | 11 ++---------
- js/src/jit/x86/MacroAssembler-x86.h           |  3 +--
- js/src/jit/x86/Trampoline-x86.cpp             |  4 ++--
- 16 files changed, 50 insertions(+), 59 deletions(-)
-
-diff --git a/js/src/jit/Ion.cpp b/js/src/jit/Ion.cpp
-index 9635742..a77f9b4 100644
---- a/js/src/jit/Ion.cpp
-+++ b/js/src/jit/Ion.cpp
-@@ -150,6 +150,7 @@ JitRuntime::JitRuntime()
-   : execAlloc_(nullptr),
-     ionAlloc_(nullptr),
-     exceptionTail_(nullptr),
-+    exceptionTailParallel_(nullptr),
-     bailoutTail_(nullptr),
-     enterJIT_(nullptr),
-     bailoutHandler_(nullptr),
-@@ -198,10 +199,18 @@ JitRuntime::initialize(JSContext *cx)
-         return false;
- 
-     IonSpew(IonSpew_Codegen, "# Emitting exception tail stub");
--    exceptionTail_ = generateExceptionTailStub(cx);
-+
-+    void *handler = JS_FUNC_TO_DATA_PTR(void *, jit::HandleException);
-+    void *handlerParallel = JS_FUNC_TO_DATA_PTR(void *, jit::HandleParallelFailure);
-+
-+    exceptionTail_ = generateExceptionTailStub(cx, handler);
-     if (!exceptionTail_)
-         return false;
- 
-+    exceptionTailParallel_ = generateExceptionTailStub(cx, handlerParallel);
-+    if (!exceptionTailParallel_)
-+        return false;
-+
-     IonSpew(IonSpew_Codegen, "# Emitting bailout tail stub");
-     bailoutTail_ = generateBailoutTailStub(cx);
-     if (!bailoutTail_)
-diff --git a/js/src/jit/IonMacroAssembler.cpp b/js/src/jit/IonMacroAssembler.cpp
-index 2326fe1..9f7cc8f 100644
---- a/js/src/jit/IonMacroAssembler.cpp
-+++ b/js/src/jit/IonMacroAssembler.cpp
-@@ -1030,18 +1030,18 @@ MacroAssembler::handleFailure(ExecutionMode executionMode)
-         sps_->skipNextReenter();
-     leaveSPSFrame();
- 
--    void *handler;
-+    JitCode *excTail;
-     switch (executionMode) {
-       case SequentialExecution:
--        handler = JS_FUNC_TO_DATA_PTR(void *, jit::HandleException);
-+        excTail = GetIonContext()->runtime->jitRuntime()->getExceptionTail();
-         break;
-       case ParallelExecution:
--        handler = JS_FUNC_TO_DATA_PTR(void *, jit::HandleParallelFailure);
-+        excTail = GetIonContext()->runtime->jitRuntime()->getExceptionTailParallel();
-         break;
-       default:
-         MOZ_ASSUME_UNREACHABLE("No such execution mode");
-     }
--    MacroAssemblerSpecific::handleFailureWithHandler(handler);
-+    jump(excTail);
- 
-     // Doesn't actually emit code, but balances the leave()
-     if (sps_)
-diff --git a/js/src/jit/JitCompartment.h b/js/src/jit/JitCompartment.h
-index 486a29d..475a685 100644
---- a/js/src/jit/JitCompartment.h
-+++ b/js/src/jit/JitCompartment.h
-@@ -153,8 +153,9 @@ class JitRuntime
-     // need for explicit interrupt checks.
-     JSC::ExecutableAllocator *ionAlloc_;
- 
--    // Shared post-exception-handler tail
-+    // Shared exception-handler tail.
-     JitCode *exceptionTail_;
-+    JitCode *exceptionTailParallel_;
- 
-     // Shared post-bailout-handler tail.
-     JitCode *bailoutTail_;
-@@ -214,7 +215,7 @@ class JitRuntime
-     InlineList<PatchableBackedge> backedgeList_;
- 
-   private:
--    JitCode *generateExceptionTailStub(JSContext *cx);
-+    JitCode *generateExceptionTailStub(JSContext *cx, void *handler);
-     JitCode *generateBailoutTailStub(JSContext *cx);
-     JitCode *generateEnterJIT(JSContext *cx, EnterJitType type);
-     JitCode *generateArgumentsRectifier(JSContext *cx, ExecutionMode mode, void **returnAddrOut);
-@@ -287,6 +288,9 @@ class JitRuntime
-     JitCode *getExceptionTail() const {
-         return exceptionTail_;
-     }
-+    JitCode *getExceptionTailParallel() const {
-+        return exceptionTailParallel_;
-+    }
- 
-     JitCode *getBailoutTail() const {
-         return bailoutTail_;
-diff --git a/js/src/jit/arm/MacroAssembler-arm.cpp b/js/src/jit/arm/MacroAssembler-arm.cpp
-index b34483c..63b3ff2 100644
---- a/js/src/jit/arm/MacroAssembler-arm.cpp
-+++ b/js/src/jit/arm/MacroAssembler-arm.cpp
-@@ -3984,25 +3984,18 @@ MacroAssemblerARMCompat::callWithABI(const Address &fun, MoveOp::Type result)
- }
- 
- void
--MacroAssemblerARMCompat::handleFailureWithHandler(void *handler)
-+MacroAssemblerARMCompat::handleFailureWithHandlerTail(void *handler)
- {
-     // Reserve space for exception information.
-     int size = (sizeof(ResumeFromException) + 7) & ~7;
-     ma_sub(Imm32(size), sp);
-     ma_mov(sp, r0);
- 
--    // Ask for an exception handler.
-+    // Call the handler.
-     setupUnalignedABICall(1, r1);
-     passABIArg(r0);
-     callWithABI(handler);
- 
--    JitCode *excTail = GetIonContext()->runtime->jitRuntime()->getExceptionTail();
--    branch(excTail);
--}
--
--void
--MacroAssemblerARMCompat::handleFailureWithHandlerTail()
--{
-     Label entryFrame;
-     Label catch_;
-     Label finally;
-diff --git a/js/src/jit/arm/MacroAssembler-arm.h b/js/src/jit/arm/MacroAssembler-arm.h
-index 00e8a03..6ccc0be 100644
---- a/js/src/jit/arm/MacroAssembler-arm.h
-+++ b/js/src/jit/arm/MacroAssembler-arm.h
-@@ -711,6 +711,9 @@ class MacroAssemblerARMCompat : public MacroAssemblerARM
-     void jump(Label *label) {
-         as_b(label);
-     }
-+    void jump(JitCode *code) {
-+        branch(code);
-+    }
-     void jump(Register reg) {
-         ma_bx(reg);
-     }
-@@ -1202,8 +1205,7 @@ class MacroAssemblerARMCompat : public MacroAssemblerARM
- 
-     void linkExitFrame();
-     void linkParallelExitFrame(const Register &pt);
--    void handleFailureWithHandler(void *handler);
--    void handleFailureWithHandlerTail();
-+    void handleFailureWithHandlerTail(void *handler);
- 
-     /////////////////////////////////////////////////////////////////
-     // Common interface.
-diff --git a/js/src/jit/arm/Trampoline-arm.cpp b/js/src/jit/arm/Trampoline-arm.cpp
-index e539c00..693dad8 100644
---- a/js/src/jit/arm/Trampoline-arm.cpp
-+++ b/js/src/jit/arm/Trampoline-arm.cpp
-@@ -928,11 +928,11 @@ JitRuntime::generateDebugTrapHandler(JSContext *cx)
- }
- 
- JitCode *
--JitRuntime::generateExceptionTailStub(JSContext *cx)
-+JitRuntime::generateExceptionTailStub(JSContext *cx, void *handler)
- {
-     MacroAssembler masm;
- 
--    masm.handleFailureWithHandlerTail();
-+    masm.handleFailureWithHandlerTail(handler);
- 
-     Linker linker(masm);
-     AutoFlushICache afc("ExceptionTailStub");
-diff --git a/js/src/jit/mips/MacroAssembler-mips.cpp b/js/src/jit/mips/MacroAssembler-mips.cpp
-index cee93a5..256434d 100644
---- a/js/src/jit/mips/MacroAssembler-mips.cpp
-+++ b/js/src/jit/mips/MacroAssembler-mips.cpp
-@@ -3139,25 +3139,18 @@ MacroAssemblerMIPSCompat::callWithABI(const Address &fun, MoveOp::Type result)
- }
- 
- void
--MacroAssemblerMIPSCompat::handleFailureWithHandler(void *handler)
-+MacroAssemblerMIPSCompat::handleFailureWithHandlerTail(void *handler)
- {
-     // Reserve space for exception information.
-     int size = (sizeof(ResumeFromException) + StackAlignment) & ~(StackAlignment - 1);
-     ma_subu(StackPointer, StackPointer, Imm32(size));
-     ma_move(a0, StackPointer); // Use a0 since it is a first function argument
- 
--    // Ask for an exception handler.
-+    // Call the handler.
-     setupUnalignedABICall(1, a1);
-     passABIArg(a0);
-     callWithABI(handler);
- 
--    JitCode *excTail = GetIonContext()->runtime->jitRuntime()->getExceptionTail();
--    branch(excTail);
--}
--
--void
--MacroAssemblerMIPSCompat::handleFailureWithHandlerTail()
--{
-     Label entryFrame;
-     Label catch_;
-     Label finally;
-diff --git a/js/src/jit/mips/MacroAssembler-mips.h b/js/src/jit/mips/MacroAssembler-mips.h
-index ed1f566..899a50e 100644
---- a/js/src/jit/mips/MacroAssembler-mips.h
-+++ b/js/src/jit/mips/MacroAssembler-mips.h
-@@ -481,6 +481,10 @@ class MacroAssemblerMIPSCompat : public MacroAssemblerMIPS
-         as_nop();
-     }
- 
-+    void jump(JitCode *code) {
-+        branch(code);
-+    }
-+
-     void neg32(Register reg) {
-         ma_negu(reg, reg);
-     }
-@@ -842,8 +846,7 @@ public:
- 
-     void linkExitFrame();
-     void linkParallelExitFrame(const Register &pt);
--    void handleFailureWithHandler(void *handler);
--    void handleFailureWithHandlerTail();
-+    void handleFailureWithHandlerTail(void *handler);
- 
-     /////////////////////////////////////////////////////////////////
-     // Common interface.
-diff --git a/js/src/jit/mips/Trampoline-mips.cpp b/js/src/jit/mips/Trampoline-mips.cpp
-index b456845..64c2385 100644
---- a/js/src/jit/mips/Trampoline-mips.cpp
-+++ b/js/src/jit/mips/Trampoline-mips.cpp
-@@ -960,11 +960,11 @@ JitRuntime::generateDebugTrapHandler(JSContext *cx)
- 
- 
- JitCode *
--JitRuntime::generateExceptionTailStub(JSContext *cx)
-+JitRuntime::generateExceptionTailStub(JSContext *cx, void *handler)
- {
-     MacroAssembler masm;
- 
--    masm.handleFailureWithHandlerTail();
-+    masm.handleFailureWithHandlerTail(handler);
- 
-     Linker linker(masm);
-     AutoFlushICache afc("ExceptionTailStub");
-diff --git a/js/src/jit/shared/MacroAssembler-x86-shared.h b/js/src/jit/shared/MacroAssembler-x86-shared.h
-index 01d1a4b..779cf83 100644
---- a/js/src/jit/shared/MacroAssembler-x86-shared.h
-+++ b/js/src/jit/shared/MacroAssembler-x86-shared.h
-@@ -287,6 +287,9 @@ class MacroAssemblerX86Shared : public Assembler
-     void jump(Label *label) {
-         jmp(label);
-     }
-+    void jump(JitCode *code) {
-+        jmp(code);
-+    }
-     void jump(RepatchLabel *label) {
-         jmp(label);
-     }
-diff --git a/js/src/jit/x64/MacroAssembler-x64.cpp b/js/src/jit/x64/MacroAssembler-x64.cpp
-index 9a9f995..0db799c 100644
---- a/js/src/jit/x64/MacroAssembler-x64.cpp
-+++ b/js/src/jit/x64/MacroAssembler-x64.cpp
-@@ -287,24 +287,17 @@ MacroAssemblerX64::callWithABI(Address fun, MoveOp::Type result)
- }
- 
- void
--MacroAssemblerX64::handleFailureWithHandler(void *handler)
-+MacroAssemblerX64::handleFailureWithHandlerTail(void *handler)
- {
-     // Reserve space for exception information.
-     subq(Imm32(sizeof(ResumeFromException)), rsp);
-     movq(rsp, rax);
- 
--    // Ask for an exception handler.
-+    // Call the handler.
-     setupUnalignedABICall(1, rcx);
-     passABIArg(rax);
-     callWithABI(handler);
- 
--    JitCode *excTail = GetIonContext()->runtime->jitRuntime()->getExceptionTail();
--    jmp(excTail);
--}
--
--void
--MacroAssemblerX64::handleFailureWithHandlerTail()
--{
-     Label entryFrame;
-     Label catch_;
-     Label finally;
-diff --git a/js/src/jit/x64/MacroAssembler-x64.h b/js/src/jit/x64/MacroAssembler-x64.h
-index 2c11e9a..5010549 100644
---- a/js/src/jit/x64/MacroAssembler-x64.h
-+++ b/js/src/jit/x64/MacroAssembler-x64.h
-@@ -1288,8 +1288,7 @@ class MacroAssemblerX64 : public MacroAssemblerX86Shared
-     void callWithABI(AsmJSImmPtr imm, MoveOp::Type result = MoveOp::GENERAL);
-     void callWithABI(Address fun, MoveOp::Type result = MoveOp::GENERAL);
- 
--    void handleFailureWithHandler(void *handler);
--    void handleFailureWithHandlerTail();
-+    void handleFailureWithHandlerTail(void *handler);
- 
-     void makeFrameDescriptor(Register frameSizeReg, FrameType type) {
-         shlq(Imm32(FRAMESIZE_SHIFT), frameSizeReg);
-diff --git a/js/src/jit/x64/Trampoline-x64.cpp b/js/src/jit/x64/Trampoline-x64.cpp
-index 72f4592..3b83850 100644
---- a/js/src/jit/x64/Trampoline-x64.cpp
-+++ b/js/src/jit/x64/Trampoline-x64.cpp
-@@ -785,11 +785,11 @@ JitRuntime::generateDebugTrapHandler(JSContext *cx)
- }
- 
- JitCode *
--JitRuntime::generateExceptionTailStub(JSContext *cx)
-+JitRuntime::generateExceptionTailStub(JSContext *cx, void *handler)
- {
-     MacroAssembler masm;
- 
--    masm.handleFailureWithHandlerTail();
-+    masm.handleFailureWithHandlerTail(handler);
- 
-     Linker linker(masm);
-     JitCode *code = linker.newCode<NoGC>(cx, JSC::OTHER_CODE);
-diff --git a/js/src/jit/x86/MacroAssembler-x86.cpp b/js/src/jit/x86/MacroAssembler-x86.cpp
-index d36f4d3..57a0f85 100644
---- a/js/src/jit/x86/MacroAssembler-x86.cpp
-+++ b/js/src/jit/x86/MacroAssembler-x86.cpp
-@@ -281,24 +281,17 @@ MacroAssemblerX86::callWithABI(const Address &fun, MoveOp::Type result)
- }
- 
- void
--MacroAssemblerX86::handleFailureWithHandler(void *handler)
-+MacroAssemblerX86::handleFailureWithHandlerTail(void *handler)
- {
-     // Reserve space for exception information.
-     subl(Imm32(sizeof(ResumeFromException)), esp);
-     movl(esp, eax);
- 
--    // Ask for an exception handler.
-+    // Call the handler.
-     setupUnalignedABICall(1, ecx);
-     passABIArg(eax);
-     callWithABI(handler);
- 
--    JitCode *excTail = GetIonContext()->runtime->jitRuntime()->getExceptionTail();
--    jmp(excTail);
--}
--
--void
--MacroAssemblerX86::handleFailureWithHandlerTail()
--{
-     Label entryFrame;
-     Label catch_;
-     Label finally;
-diff --git a/js/src/jit/x86/MacroAssembler-x86.h b/js/src/jit/x86/MacroAssembler-x86.h
-index 17de7a7..7e578c8 100644
---- a/js/src/jit/x86/MacroAssembler-x86.h
-+++ b/js/src/jit/x86/MacroAssembler-x86.h
-@@ -1086,8 +1086,7 @@ class MacroAssemblerX86 : public MacroAssemblerX86Shared
-     void callWithABI(const Address &fun, MoveOp::Type result = MoveOp::GENERAL);
- 
-     // Used from within an Exit frame to handle a pending exception.
--    void handleFailureWithHandler(void *handler);
--    void handleFailureWithHandlerTail();
-+    void handleFailureWithHandlerTail(void *handler);
- 
-     void makeFrameDescriptor(Register frameSizeReg, FrameType type) {
-         shll(Imm32(FRAMESIZE_SHIFT), frameSizeReg);
-diff --git a/js/src/jit/x86/Trampoline-x86.cpp b/js/src/jit/x86/Trampoline-x86.cpp
-index 0a2f0de..9fd2c00 100644
---- a/js/src/jit/x86/Trampoline-x86.cpp
-+++ b/js/src/jit/x86/Trampoline-x86.cpp
-@@ -827,11 +827,11 @@ JitRuntime::generateDebugTrapHandler(JSContext *cx)
- }
- 
- JitCode *
--JitRuntime::generateExceptionTailStub(JSContext *cx)
-+JitRuntime::generateExceptionTailStub(JSContext *cx, void *handler)
- {
-     MacroAssembler masm;
- 
--    masm.handleFailureWithHandlerTail();
-+    masm.handleFailureWithHandlerTail(handler);
- 
-     Linker linker(masm);
-     JitCode *code = linker.newCode<NoGC>(cx, JSC::OTHER_CODE);
--- 
-2.1.2
-
diff --git a/gnu/packages/patches/icecat-CVE-2014-8634-pt2.patch b/gnu/packages/patches/icecat-CVE-2014-8634-pt2.patch
deleted file mode 100644
index d7f68e9df3..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-8634-pt2.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From e5de31c8f927b1aa06dde02c356cda33beb463d9 Mon Sep 17 00:00:00 2001
-From: Kyle Huey <khuey@kylehuey.com>
-Date: Fri, 19 Dec 2014 18:16:17 -0800
-Subject: [PATCH] Bug 1111737. r=smaug, a=bkerensa
-
----
- content/base/src/nsScriptLoader.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/content/base/src/nsScriptLoader.cpp b/content/base/src/nsScriptLoader.cpp
-index a6a4c34..7f3a76e 100644
---- a/content/base/src/nsScriptLoader.cpp
-+++ b/content/base/src/nsScriptLoader.cpp
-@@ -812,7 +812,12 @@ NotifyOffThreadScriptLoadCompletedRunnable::Run()
- {
-   MOZ_ASSERT(NS_IsMainThread());
- 
--  nsresult rv = mLoader->ProcessOffThreadRequest(mRequest, &mToken);
-+  // We want these to be dropped on the main thread, once we return from this
-+  // function.
-+  nsRefPtr<nsScriptLoadRequest> request = mRequest.forget();
-+  nsRefPtr<nsScriptLoader> loader = mLoader.forget();
-+
-+  nsresult rv = loader->ProcessOffThreadRequest(request, &mToken);
- 
-   if (mToken) {
-     // The result of the off thread parse was not actually needed to process
--- 
-2.1.2
-
diff --git a/gnu/packages/patches/icecat-CVE-2014-8638-pt1.patch b/gnu/packages/patches/icecat-CVE-2014-8638-pt1.patch
deleted file mode 100644
index 83ee5fc79e..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-8638-pt1.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 0c4a326295bdb37742fe23f0395916d2ba8ade53 Mon Sep 17 00:00:00 2001
-From: Christoph Kerschbaumer <mozilla@christophkerschbaumer.com>
-Date: Wed, 19 Nov 2014 16:03:39 -0800
-Subject: [PATCH 1/2] Bug 1080987 - navigator.sendBeacon() needs to sent origin
- header. r=sicking, a=bkerensa
-
----
- dom/base/Navigator.cpp | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp
-index 0f03ad3..020e370 100644
---- a/dom/base/Navigator.cpp
-+++ b/dom/base/Navigator.cpp
-@@ -1265,6 +1265,9 @@ Navigator::SendBeacon(const nsAString& aUrl,
-                                                                principal,
-                                                                true);
- 
-+  rv = cors->Init(channel, true);
-+  NS_ENSURE_SUCCESS(rv, false);
-+
-   // Start a preflight if cross-origin and content type is not whitelisted
-   rv = secMan->CheckSameOriginURI(documentURI, uri, false);
-   bool crossOrigin = NS_FAILED(rv);
--- 
-2.1.2
-
diff --git a/gnu/packages/patches/icecat-CVE-2014-8638-pt2.patch b/gnu/packages/patches/icecat-CVE-2014-8638-pt2.patch
deleted file mode 100644
index 4e439efb89..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-8638-pt2.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From 0d47e593c685313571aaa00cb7341b458123c82f Mon Sep 17 00:00:00 2001
-From: Christoph Kerschbaumer <mozilla@christophkerschbaumer.com>
-Date: Wed, 19 Nov 2014 16:03:30 -0800
-Subject: [PATCH 2/2] Bug 1080987 - navigator.sendBeacon() needs to sent origin
- header - test. r=sicking, a=bkerensa
-
----
- .../beacon/beacon-originheader-handler.sjs         | 41 ++++++++++++++
- dom/tests/mochitest/beacon/mochitest.ini           |  2 +
- .../mochitest/beacon/test_beaconOriginHeader.html  | 64 ++++++++++++++++++++++
- 3 files changed, 107 insertions(+)
- create mode 100644 dom/tests/mochitest/beacon/beacon-originheader-handler.sjs
- create mode 100644 dom/tests/mochitest/beacon/test_beaconOriginHeader.html
-
-diff --git a/dom/tests/mochitest/beacon/beacon-originheader-handler.sjs b/dom/tests/mochitest/beacon/beacon-originheader-handler.sjs
-new file mode 100644
-index 0000000..baed22c
---- /dev/null
-+++ b/dom/tests/mochitest/beacon/beacon-originheader-handler.sjs
-@@ -0,0 +1,41 @@
-+/*
-+ * TestSever customized specifically for the needs of:
-+ * Bug 1080987 - navigator.sendBeacon() needs to sent origin header
-+ */
-+
-+function handleRequest(request, response)
-+{
-+  response.setHeader("Cache-Control", "no-cache", false);
-+  response.setHeader("Content-Type", "text/plain", false);
-+
-+  // case XHR-REQUEST: the xhr-request tries to query the
-+  // stored header from the beacon request.
-+  if (request.queryString == "queryheader") {
-+    var header = getState("originHeader");
-+    // if the beacon already stored the header - return.
-+    if (header) {
-+      response.write(header);
-+      setState("originHeader", "");
-+      return;
-+    }
-+    // otherwise wait for the beacon request
-+    response.processAsync();
-+    setObjectState("xhr-response", response);
-+    return;
-+  }
-+
-+  // case BEACON-REQUEST: get the beacon header and
-+  // store the header on the server.
-+  var header = request.getHeader("origin");
-+  setState("originHeader", header);
-+
-+  // if there is an xhr-request waiting, return the header now.
-+  getObjectState("xhr-response", function(xhrResponse) {
-+    if (!xhrResponse) {
-+      return;
-+    }
-+    setState("originHeader", "");
-+    xhrResponse.write(header);
-+    xhrResponse.finish();
-+  });
-+}
-diff --git a/dom/tests/mochitest/beacon/mochitest.ini b/dom/tests/mochitest/beacon/mochitest.ini
-index f65276e..6681fa4 100644
---- a/dom/tests/mochitest/beacon/mochitest.ini
-+++ b/dom/tests/mochitest/beacon/mochitest.ini
-@@ -2,8 +2,10 @@
- skip-if = buildapp == 'b2g' || e10s
- support-files = beacon-frame.html
-                 beacon-handler.sjs
-+                beacon-originheader-handler.sjs
- 
- [test_beacon.html]
- [test_beaconFrame.html]
- [test_beaconPreflight.html]
- [test_beaconContentPolicy.html]
-+[test_beaconOriginHeader.html]
-diff --git a/dom/tests/mochitest/beacon/test_beaconOriginHeader.html b/dom/tests/mochitest/beacon/test_beaconOriginHeader.html
-new file mode 100644
-index 0000000..b5684a9
---- /dev/null
-+++ b/dom/tests/mochitest/beacon/test_beaconOriginHeader.html
-@@ -0,0 +1,64 @@
-+<!DOCTYPE HTML>
-+<html>
-+<head>
-+  <title>Bug 1080987 - navigator.sendBeacon() needs to sent origin header</title>
-+  <!-- Including SimpleTest.js so we can use waitForExplicitFinish !-->
-+  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
-+</head>
-+<body>
-+  <p id="display"></p>
-+  <div id="content" style="visibility: hidden">
-+    <iframe style="width:100%;" id="testframe"></iframe>
-+  </div>
-+
-+<script class="testbody" type="text/javascript">
-+
-+SimpleTest.waitForExplicitFinish();
-+
-+const BEACON_URL = "http://example.com/tests/dom/tests/mochitest/beacon/beacon-originheader-handler.sjs";
-+const ORIGIN_HEADER = "http://mochi.test:8888";
-+
-+/* Description of the test:
-+ *   We call sendBeacon() cross origin and make sure that the
-+ *   origin header is actually set in the request.
-+ *
-+ * Since sendBeacon() does not expect any response, we are storing the
-+ * header on the server (*.sjs) and use an XMLHttpRequest to actually
-+ * retrieve the header back from the server. We assert that the header
-+ * is indeed correct. Since sendBeacon() and also the XMLHttpRequest()
-+ * are performed in an asynchronous fashion, there is no guarantee that
-+ * the sendBeacon() is actually executed before the XMLHttpRequest().
-+ * Hence the xhr-response might be processed asynchronously.
-+ */
-+
-+SpecialPowers.pushPrefEnv({'set': [["beacon.enabled", true]]}, runTest);
-+
-+function queryHeaderFromServer() {
-+  var xhr = new XMLHttpRequest();
-+  xhr.open("GET", "beacon-originheader-handler.sjs?queryheader", true);
-+  xhr.onload = function() {
-+    is(xhr.responseText, ORIGIN_HEADER, "SendBeacon sends right origin header");
-+    SimpleTest.finish();
-+  };
-+  xhr.onerror = function() {
-+    ok(false, "xhr request returned error");
-+    SimpleTest.finish();
-+  };
-+  xhr.send();
-+}
-+
-+function runTest() {
-+  // generate data and send beacon
-+  var formData = new FormData();
-+  formData.append('name', 'value');
-+  navigator.sendBeacon(BEACON_URL, formData);
-+
-+  // start quering the result from the server
-+  queryHeaderFromServer();
-+}
-+
-+</script>
-+</pre>
-+</body>
-+</html>
--- 
-2.1.2
-
diff --git a/gnu/packages/patches/icecat-CVE-2014-8639.patch b/gnu/packages/patches/icecat-CVE-2014-8639.patch
deleted file mode 100644
index 2610765f43..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-8639.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-From f80b2eefd451b8ed0fd783d9b9ed0412c8d46efd Mon Sep 17 00:00:00 2001
-From: Patrick McManus <mcmanus@ducksong.com>
-Date: Thu, 11 Dec 2014 13:55:16 -0500
-Subject: [PATCH] bug 1095859 - proxy tweak r=valentin.gosu a=bkerensa
-
----
- netwerk/protocol/http/nsHttpChannel.cpp |  7 ++++++-
- netwerk/test/unit/test_auth_proxy.js    | 29 +++++++++++++++++++++++++++++
- 2 files changed, 35 insertions(+), 1 deletion(-)
-
-diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp
-index f20e033..35e71c7 100644
---- a/netwerk/protocol/http/nsHttpChannel.cpp
-+++ b/netwerk/protocol/http/nsHttpChannel.cpp
-@@ -1237,7 +1237,12 @@ nsHttpChannel::ProcessResponse()
-     // notify "http-on-examine-response" observers
-     gHttpHandler->OnExamineResponse(this);
- 
--    SetCookie(mResponseHead->PeekHeader(nsHttp::Set_Cookie));
-+    // Cookies should not be handled on proxy failure either.
-+    // This would be consolidated with ProcessSecurityHeaders but it should
-+    // happen after OnExamineResponse.
-+    if (!mTransaction->ProxyConnectFailed() && (httpStatus != 407)) {
-+        SetCookie(mResponseHead->PeekHeader(nsHttp::Set_Cookie));
-+    }
- 
-     // handle unused username and password in url (see bug 232567)
-     if (httpStatus != 401 && httpStatus != 407) {
-diff --git a/netwerk/test/unit/test_auth_proxy.js b/netwerk/test/unit/test_auth_proxy.js
-index 6af4e98..9275d6d 100644
---- a/netwerk/test/unit/test_auth_proxy.js
-+++ b/netwerk/test/unit/test_auth_proxy.js
-@@ -172,6 +172,12 @@ var listener = {
-       // If we expect 200, the request should have succeeded
-       do_check_eq(this.expectedCode == 200, request.requestSucceeded);
- 
-+      var cookie = "";
-+      try {
-+        cookie = request.getRequestHeader("Cookie");
-+      } catch (e) { }
-+      do_check_eq(cookie, "");
-+
-     } catch (e) {
-       do_throw("Unexpected exception: " + e);
-     }
-@@ -261,6 +267,25 @@ function test_all_ok() {
-   do_test_pending();
- }
- 
-+function test_proxy_407_cookie() {
-+  var chan = makeChan();
-+  chan.notificationCallbacks = new Requestor(FLAG_RETURN_FALSE, 0);
-+  chan.setRequestHeader("X-Set-407-Cookie", "1", false);
-+  listener.expectedCode = 407; // Proxy Unauthorized
-+  chan.asyncOpen(listener, null);
-+
-+  do_test_pending();
-+}
-+
-+function test_proxy_200_cookie() {
-+  var chan = makeChan();
-+  chan.notificationCallbacks = new Requestor(0, 0);
-+  chan.setRequestHeader("X-Set-407-Cookie", "1", false);
-+  listener.expectedCode = 200; // OK
-+  chan.asyncOpen(listener, null);
-+  do_test_pending();
-+}
-+
- function test_host_returnfalse() {
-   dump("\ntest: host returnfalse\n");
-   var chan = makeChan();
-@@ -301,6 +326,7 @@ function test_proxy_wrongpw_host_returnfalse() {
- }
- 
- var tests = [test_proxy_returnfalse, test_proxy_wrongpw, test_all_ok,
-+        test_proxy_407_cookie, test_proxy_200_cookie,
-         test_host_returnfalse, test_host_wrongpw,
-         test_proxy_wrongpw_host_wrongpw, test_proxy_wrongpw_host_returnfalse];
- 
-@@ -331,6 +357,9 @@ function proxyAuthHandler(metadata, response) {
-           "Unauthorized by HTTP proxy");
-       response.setHeader("Proxy-Authenticate",
-           'Basic realm="' + realm + '"', false);
-+      if (metadata.hasHeader("X-Set-407-Cookie")) {
-+          response.setHeader("Set-Cookie", "chewy", false);
-+      }
-       body = "failed";
-       response.bodyOutputStream.write(body, body.length);
-     }
--- 
-2.1.2
-
diff --git a/gnu/packages/patches/icecat-CVE-2014-8641.patch b/gnu/packages/patches/icecat-CVE-2014-8641.patch
deleted file mode 100644
index ec42861945..0000000000
--- a/gnu/packages/patches/icecat-CVE-2014-8641.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From e36a3dd359ff0ac9c8796d41bedc884218d479e7 Mon Sep 17 00:00:00 2001
-From: Paul Adenot <paul@paul.cx>
-Date: Tue, 16 Dec 2014 18:45:40 +0100
-Subject: [PATCH] Bug 1108455. r=kinetik, a=sledru
-
----
- media/libcubeb/src/cubeb_wasapi.cpp | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
-diff --git a/media/libcubeb/src/cubeb_wasapi.cpp b/media/libcubeb/src/cubeb_wasapi.cpp
-index 135aa86..5387a4f 100644
---- a/media/libcubeb/src/cubeb_wasapi.cpp
-+++ b/media/libcubeb/src/cubeb_wasapi.cpp
-@@ -365,10 +365,8 @@ wasapi_stream_render_loop(LPVOID stream)
-       assert(padding <= stm->buffer_frame_count);
- 
-       if (stm->draining) {
--        if (padding == 0) {
--          stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_DRAINED);
--          is_playing = false;
--        }
-+        stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_DRAINED);
-+        is_playing = false;
-         continue;
-       }
- 
--- 
-2.1.2
-
diff --git a/gnu/packages/patches/icecat-armhf-xpcom.patch b/gnu/packages/patches/icecat-armhf-xpcom.patch
deleted file mode 100644
index e92c8bbf1e..0000000000
--- a/gnu/packages/patches/icecat-armhf-xpcom.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 06198585dae1e4079b4b52b49827fd5b826030b7 Mon Sep 17 00:00:00 2001
-From: Douglas Crosher <dtc-moz@scieneer.com>
-Date: Sun, 16 Nov 2014 00:29:23 +1100
-Subject: [PATCH] Bug 1050258 - ARM hard-float XPCOM: correct argument passing.
- r=mjrosenb, a=bkerensa
-
----
- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp
-index 946b7e3..c1c536b 100644
---- a/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp
-+++ b/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp
-@@ -224,6 +224,7 @@ static inline void copy_dword(uint32_t* &ireg_args,
-     *(uint64_t *)ireg_args = data;
-     ireg_args += 2;
-   } else {
-+    ireg_args = end;
-     if ((uint32_t)stack_args & 4) {
-       stack_args++;
-     }
--- 
-2.1.2
-