Backported to icecat-31.8 from the upstream esr38 branch.

From 95231c1bca9c9495393b795513bea71a21a6ec2f Mon Sep 17 00:00:00 2001
From: Birunthan Mohanathas <birunthan@mohanathas.com>
Date: Tue, 21 Jul 2015 09:42:58 -0700
Subject: [PATCH] Bug 1182723 - Properly handle self-assignment in
 nsTArray::operator=. r=mccr8, a=abillings

--- icecat-31.8.0/xpcom/glue/nsTArray.h.orig	2015-08-12 16:03:56.353746969 -0400
+++ icecat-31.8.0/xpcom/glue/nsTArray.h	2015-08-12 16:06:52.144553848 -0400
@@ -811,7 +811,9 @@
   // array.  It is optimized to reuse existing storage if possible.
   // @param other  The array object to copy.
   self_type& operator=(const self_type& other) {
-    ReplaceElementsAt(0, Length(), other.Elements(), other.Length());
+    if (this != &other) {
+      ReplaceElementsAt(0, Length(), other.Elements(), other.Length());
+    }
     return *this;
   }
 
