svn commit: r377564 - in head: mail/thunderbird/files www/firefox-esr/files www/firefox/files www/libxul/files www/seamonkey/files

Jan Beich jbeich at FreeBSD.org
Tue Jan 20 23:59:06 UTC 2015


Author: jbeich
Date: Tue Jan 20 23:59:03 2015
New Revision: 377564
URL: https://svnweb.freebsd.org/changeset/ports/377564
QAT: https://qat.redports.org/buildarchive/r377564/

Log:
  Backport Wikipedia crashfix for clang 3.5
  
  PR:		196802
  Reported by:	dumbbell
  Obtained from:	https://github.com/mozilla/gecko-dev/commit/87f367b
  Obtained from:	https://github.com/mozilla/gecko-dev/commit/c97894b (esr31 version)
  Differential Revision:	https://reviews.freebsd.org/D1568
  Approved by:	flo (mentor)
  MFH:		2015Q1

Added:
  head/mail/thunderbird/files/patch-bug1083461   (contents, props changed)
  head/www/firefox-esr/files/patch-bug1083461   (contents, props changed)
  head/www/firefox/files/patch-bug1083461   (contents, props changed)
  head/www/libxul/files/patch-bug1083461   (contents, props changed)
  head/www/seamonkey/files/patch-bug1083461   (contents, props changed)

Added: head/mail/thunderbird/files/patch-bug1083461
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/mail/thunderbird/files/patch-bug1083461	Tue Jan 20 23:59:03 2015	(r377564)
@@ -0,0 +1,156 @@
+commit c97894b
+Author: L. David Baron <dbaron at dbaron.org>
+Date:   Sun Oct 19 23:31:39 2014 -0400
+
+    Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers.  r=bzbarsky  approval-mozilla-esr31=bkerensa
+---
+ layout/style/nsCSSValue.cpp       | 28 ++++++++++++++++------------
+ layout/style/nsCSSValue.h         | 22 ++++++++++++++++------
+ layout/style/nsStyleAnimation.cpp |  6 ++++--
+ 3 files changed, 36 insertions(+), 20 deletions(-)
+
+diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp
+index 781ef65..4bbc979 100644
+--- mozilla/layout/style/nsCSSValue.cpp
++++ mozilla/layout/style/nsCSSValue.cpp
+@@ -253,13 +253,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const
+       return *mValue.mRect == *aOther.mValue.mRect;
+     }
+     else if (eCSSUnit_List == mUnit) {
+-      return *mValue.mList == *aOther.mValue.mList;
++      return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList);
+     }
+     else if (eCSSUnit_SharedList == mUnit) {
+       return *mValue.mSharedList == *aOther.mValue.mSharedList;
+     }
+     else if (eCSSUnit_PairList == mUnit) {
+-      return *mValue.mPairList == *aOther.mValue.mPairList;
++      return nsCSSValuePairList::Equal(mValue.mPairList,
++                                       aOther.mValue.mPairList);
+     }
+     else if (eCSSUnit_GridTemplateAreas == mUnit) {
+       return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas;
+@@ -1740,13 +1741,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+   }
+ }
+ 
+-bool
+-nsCSSValueList::operator==(const nsCSSValueList& aOther) const
++/* static */ bool
++nsCSSValueList::Equal(const nsCSSValueList* aList1,
++                      const nsCSSValueList* aList2)
+ {
+-  if (this == &aOther)
++  if (aList1 == aList2) {
+     return true;
++  }
+ 
+-  const nsCSSValueList *p1 = this, *p2 = &aOther;
++  const nsCSSValueList *p1 = aList1, *p2 = aList2;
+   for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
+     if (p1->mValue != p2->mValue)
+       return false;
+@@ -1799,8 +1802,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult
+ bool
+ nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const
+ {
+-  return !mHead == !aOther.mHead &&
+-         (!mHead || *mHead == *aOther.mHead);
++  return nsCSSValueList::Equal(mHead, aOther.mHead);
+ }
+ 
+ size_t
+@@ -2010,13 +2012,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty,
+   }
+ }
+ 
+-bool
+-nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const
++/* static */ bool
++nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1,
++                          const nsCSSValuePairList* aList2)
+ {
+-  if (this == &aOther)
++  if (aList1 == aList2) {
+     return true;
++  }
+ 
+-  const nsCSSValuePairList *p1 = this, *p2 = &aOther;
++  const nsCSSValuePairList *p1 = aList1, *p2 = aList2;
+   for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
+     if (p1->mXValue != p2->mXValue ||
+         p1->mYValue != p2->mYValue)
+diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h
+index 753938c..77eeef0 100644
+--- mozilla/layout/style/nsCSSValue.h
++++ mozilla/layout/style/nsCSSValue.h
+@@ -806,9 +806,8 @@ struct nsCSSValueList {
+   void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+                       nsCSSValue::Serialization aValueSerialization) const;
+ 
+-  bool operator==(nsCSSValueList const& aOther) const;
+-  bool operator!=(const nsCSSValueList& aOther) const
+-  { return !(*this == aOther); }
++  static bool Equal(const nsCSSValueList* aList1,
++                    const nsCSSValueList* aList2);
+ 
+   size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+ 
+@@ -821,6 +820,12 @@ private:
+   {
+     MOZ_COUNT_CTOR(nsCSSValueList);
+   }
++
++  // We don't want operator== or operator!= because they wouldn't be
++  // null-safe, which is generally what we need.  Use |Equal| method
++  // above instead.
++  bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE;
++  bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE;
+ };
+ 
+ // nsCSSValueList_heap differs from nsCSSValueList only in being
+@@ -1199,9 +1204,8 @@ struct nsCSSValuePairList {
+   void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+                       nsCSSValue::Serialization aValueSerialization) const;
+ 
+-  bool operator==(const nsCSSValuePairList& aOther) const;
+-  bool operator!=(const nsCSSValuePairList& aOther) const
+-  { return !(*this == aOther); }
++  static bool Equal(const nsCSSValuePairList* aList1,
++                    const nsCSSValuePairList* aList2);
+ 
+   size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+ 
+@@ -1215,6 +1219,12 @@ private:
+   {
+     MOZ_COUNT_CTOR(nsCSSValuePairList);
+   }
++
++  // We don't want operator== or operator!= because they wouldn't be
++  // null-safe, which is generally what we need.  Use |Equal| method
++  // above instead.
++  bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE;
++  bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE;
+ };
+ 
+ // nsCSSValuePairList_heap differs from nsCSSValuePairList only in being
+diff --git layout/style/nsStyleAnimation.cpp layout/style/nsStyleAnimation.cpp
+index 6c2ccb0..8dbe404 100644
+--- mozilla/layout/style/nsStyleAnimation.cpp
++++ mozilla/layout/style/nsStyleAnimation.cpp
+@@ -3816,11 +3816,13 @@ nsStyleAnimation::Value::operator==(const Value& aOther) const
+     case eUnit_Filter:
+     case eUnit_Shadow:
+     case eUnit_BackgroundPosition:
+-      return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList;
++      return nsCSSValueList::Equal(mValue.mCSSValueList,
++                                   aOther.mValue.mCSSValueList);
+     case eUnit_Transform:
+       return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList;
+     case eUnit_CSSValuePairList:
+-      return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList;
++      return nsCSSValuePairList::Equal(mValue.mCSSValuePairList,
++                                       aOther.mValue.mCSSValuePairList);
+     case eUnit_UnparsedString:
+       return (NS_strcmp(GetStringBufferValue(),
+                         aOther.GetStringBufferValue()) == 0);

Added: head/www/firefox-esr/files/patch-bug1083461
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/firefox-esr/files/patch-bug1083461	Tue Jan 20 23:59:03 2015	(r377564)
@@ -0,0 +1,156 @@
+commit c97894b
+Author: L. David Baron <dbaron at dbaron.org>
+Date:   Sun Oct 19 23:31:39 2014 -0400
+
+    Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers.  r=bzbarsky  approval-mozilla-esr31=bkerensa
+---
+ layout/style/nsCSSValue.cpp       | 28 ++++++++++++++++------------
+ layout/style/nsCSSValue.h         | 22 ++++++++++++++++------
+ layout/style/nsStyleAnimation.cpp |  6 ++++--
+ 3 files changed, 36 insertions(+), 20 deletions(-)
+
+diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp
+index 781ef65..4bbc979 100644
+--- layout/style/nsCSSValue.cpp
++++ layout/style/nsCSSValue.cpp
+@@ -253,13 +253,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const
+       return *mValue.mRect == *aOther.mValue.mRect;
+     }
+     else if (eCSSUnit_List == mUnit) {
+-      return *mValue.mList == *aOther.mValue.mList;
++      return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList);
+     }
+     else if (eCSSUnit_SharedList == mUnit) {
+       return *mValue.mSharedList == *aOther.mValue.mSharedList;
+     }
+     else if (eCSSUnit_PairList == mUnit) {
+-      return *mValue.mPairList == *aOther.mValue.mPairList;
++      return nsCSSValuePairList::Equal(mValue.mPairList,
++                                       aOther.mValue.mPairList);
+     }
+     else if (eCSSUnit_GridTemplateAreas == mUnit) {
+       return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas;
+@@ -1740,13 +1741,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+   }
+ }
+ 
+-bool
+-nsCSSValueList::operator==(const nsCSSValueList& aOther) const
++/* static */ bool
++nsCSSValueList::Equal(const nsCSSValueList* aList1,
++                      const nsCSSValueList* aList2)
+ {
+-  if (this == &aOther)
++  if (aList1 == aList2) {
+     return true;
++  }
+ 
+-  const nsCSSValueList *p1 = this, *p2 = &aOther;
++  const nsCSSValueList *p1 = aList1, *p2 = aList2;
+   for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
+     if (p1->mValue != p2->mValue)
+       return false;
+@@ -1799,8 +1802,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult
+ bool
+ nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const
+ {
+-  return !mHead == !aOther.mHead &&
+-         (!mHead || *mHead == *aOther.mHead);
++  return nsCSSValueList::Equal(mHead, aOther.mHead);
+ }
+ 
+ size_t
+@@ -2010,13 +2012,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty,
+   }
+ }
+ 
+-bool
+-nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const
++/* static */ bool
++nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1,
++                          const nsCSSValuePairList* aList2)
+ {
+-  if (this == &aOther)
++  if (aList1 == aList2) {
+     return true;
++  }
+ 
+-  const nsCSSValuePairList *p1 = this, *p2 = &aOther;
++  const nsCSSValuePairList *p1 = aList1, *p2 = aList2;
+   for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
+     if (p1->mXValue != p2->mXValue ||
+         p1->mYValue != p2->mYValue)
+diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h
+index 753938c..77eeef0 100644
+--- layout/style/nsCSSValue.h
++++ layout/style/nsCSSValue.h
+@@ -806,9 +806,8 @@ struct nsCSSValueList {
+   void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+                       nsCSSValue::Serialization aValueSerialization) const;
+ 
+-  bool operator==(nsCSSValueList const& aOther) const;
+-  bool operator!=(const nsCSSValueList& aOther) const
+-  { return !(*this == aOther); }
++  static bool Equal(const nsCSSValueList* aList1,
++                    const nsCSSValueList* aList2);
+ 
+   size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+ 
+@@ -821,6 +820,12 @@ private:
+   {
+     MOZ_COUNT_CTOR(nsCSSValueList);
+   }
++
++  // We don't want operator== or operator!= because they wouldn't be
++  // null-safe, which is generally what we need.  Use |Equal| method
++  // above instead.
++  bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE;
++  bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE;
+ };
+ 
+ // nsCSSValueList_heap differs from nsCSSValueList only in being
+@@ -1199,9 +1204,8 @@ struct nsCSSValuePairList {
+   void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+                       nsCSSValue::Serialization aValueSerialization) const;
+ 
+-  bool operator==(const nsCSSValuePairList& aOther) const;
+-  bool operator!=(const nsCSSValuePairList& aOther) const
+-  { return !(*this == aOther); }
++  static bool Equal(const nsCSSValuePairList* aList1,
++                    const nsCSSValuePairList* aList2);
+ 
+   size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+ 
+@@ -1215,6 +1219,12 @@ private:
+   {
+     MOZ_COUNT_CTOR(nsCSSValuePairList);
+   }
++
++  // We don't want operator== or operator!= because they wouldn't be
++  // null-safe, which is generally what we need.  Use |Equal| method
++  // above instead.
++  bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE;
++  bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE;
+ };
+ 
+ // nsCSSValuePairList_heap differs from nsCSSValuePairList only in being
+diff --git layout/style/nsStyleAnimation.cpp layout/style/nsStyleAnimation.cpp
+index 6c2ccb0..8dbe404 100644
+--- layout/style/nsStyleAnimation.cpp
++++ layout/style/nsStyleAnimation.cpp
+@@ -3816,11 +3816,13 @@ nsStyleAnimation::Value::operator==(const Value& aOther) const
+     case eUnit_Filter:
+     case eUnit_Shadow:
+     case eUnit_BackgroundPosition:
+-      return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList;
++      return nsCSSValueList::Equal(mValue.mCSSValueList,
++                                   aOther.mValue.mCSSValueList);
+     case eUnit_Transform:
+       return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList;
+     case eUnit_CSSValuePairList:
+-      return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList;
++      return nsCSSValuePairList::Equal(mValue.mCSSValuePairList,
++                                       aOther.mValue.mCSSValuePairList);
+     case eUnit_UnparsedString:
+       return (NS_strcmp(GetStringBufferValue(),
+                         aOther.GetStringBufferValue()) == 0);

Added: head/www/firefox/files/patch-bug1083461
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/firefox/files/patch-bug1083461	Tue Jan 20 23:59:03 2015	(r377564)
@@ -0,0 +1,159 @@
+commit 87f367b
+Author: L. David Baron <dbaron at dbaron.org>
+Date:   Sun Oct 19 23:31:39 2014 -0400
+
+    Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers.  r=bzbarsky
+    
+    --HG--
+    extra : transplant_source : %CD%5D%9BE%FE%DE%A4%F2%B8%CF%D7%AE%84%90%3B%E8%A0d%D7%2B
+---
+ layout/style/StyleAnimationValue.cpp |  6 ++++--
+ layout/style/nsCSSValue.cpp          | 28 ++++++++++++++++------------
+ layout/style/nsCSSValue.h            | 22 ++++++++++++++++------
+ 3 files changed, 36 insertions(+), 20 deletions(-)
+
+diff --git layout/style/StyleAnimationValue.cpp layout/style/StyleAnimationValue.cpp
+index 40bc8bf..1898fe6 100644
+--- layout/style/StyleAnimationValue.cpp
++++ layout/style/StyleAnimationValue.cpp
+@@ -3851,11 +3851,13 @@ StyleAnimationValue::operator==(const StyleAnimationValue& aOther) const
+     case eUnit_Filter:
+     case eUnit_Shadow:
+     case eUnit_BackgroundPosition:
+-      return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList;
++      return nsCSSValueList::Equal(mValue.mCSSValueList,
++                                   aOther.mValue.mCSSValueList);
+     case eUnit_Transform:
+       return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList;
+     case eUnit_CSSValuePairList:
+-      return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList;
++      return nsCSSValuePairList::Equal(mValue.mCSSValuePairList,
++                                       aOther.mValue.mCSSValuePairList);
+     case eUnit_UnparsedString:
+       return (NS_strcmp(GetStringBufferValue(),
+                         aOther.GetStringBufferValue()) == 0);
+diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp
+index dcb8496..fefb4f9 100644
+--- layout/style/nsCSSValue.cpp
++++ layout/style/nsCSSValue.cpp
+@@ -264,13 +264,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const
+       return *mValue.mRect == *aOther.mValue.mRect;
+     }
+     else if (eCSSUnit_List == mUnit) {
+-      return *mValue.mList == *aOther.mValue.mList;
++      return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList);
+     }
+     else if (eCSSUnit_SharedList == mUnit) {
+       return *mValue.mSharedList == *aOther.mValue.mSharedList;
+     }
+     else if (eCSSUnit_PairList == mUnit) {
+-      return *mValue.mPairList == *aOther.mValue.mPairList;
++      return nsCSSValuePairList::Equal(mValue.mPairList,
++                                       aOther.mValue.mPairList);
+     }
+     else if (eCSSUnit_GridTemplateAreas == mUnit) {
+       return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas;
+@@ -1875,13 +1876,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+   }
+ }
+ 
+-bool
+-nsCSSValueList::operator==(const nsCSSValueList& aOther) const
++/* static */ bool
++nsCSSValueList::Equal(const nsCSSValueList* aList1,
++                      const nsCSSValueList* aList2)
+ {
+-  if (this == &aOther)
++  if (aList1 == aList2) {
+     return true;
++  }
+ 
+-  const nsCSSValueList *p1 = this, *p2 = &aOther;
++  const nsCSSValueList *p1 = aList1, *p2 = aList2;
+   for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
+     if (p1->mValue != p2->mValue)
+       return false;
+@@ -1934,8 +1937,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult
+ bool
+ nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const
+ {
+-  return !mHead == !aOther.mHead &&
+-         (!mHead || *mHead == *aOther.mHead);
++  return nsCSSValueList::Equal(mHead, aOther.mHead);
+ }
+ 
+ size_t
+@@ -2148,13 +2150,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty,
+   }
+ }
+ 
+-bool
+-nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const
++/* static */ bool
++nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1,
++                          const nsCSSValuePairList* aList2)
+ {
+-  if (this == &aOther)
++  if (aList1 == aList2) {
+     return true;
++  }
+ 
+-  const nsCSSValuePairList *p1 = this, *p2 = &aOther;
++  const nsCSSValuePairList *p1 = aList1, *p2 = aList2;
+   for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
+     if (p1->mXValue != p2->mXValue ||
+         p1->mYValue != p2->mYValue)
+diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h
+index 8418a2d..f0c4e63 100644
+--- layout/style/nsCSSValue.h
++++ layout/style/nsCSSValue.h
+@@ -871,9 +871,8 @@ struct nsCSSValueList {
+   void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+                       nsCSSValue::Serialization aValueSerialization) const;
+ 
+-  bool operator==(nsCSSValueList const& aOther) const;
+-  bool operator!=(const nsCSSValueList& aOther) const
+-  { return !(*this == aOther); }
++  static bool Equal(const nsCSSValueList* aList1,
++                    const nsCSSValueList* aList2);
+ 
+   size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+ 
+@@ -886,6 +885,12 @@ private:
+   {
+     MOZ_COUNT_CTOR(nsCSSValueList);
+   }
++
++  // We don't want operator== or operator!= because they wouldn't be
++  // null-safe, which is generally what we need.  Use |Equal| method
++  // above instead.
++  bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE;
++  bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE;
+ };
+ 
+ // nsCSSValueList_heap differs from nsCSSValueList only in being
+@@ -1264,9 +1269,8 @@ struct nsCSSValuePairList {
+   void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+                       nsCSSValue::Serialization aValueSerialization) const;
+ 
+-  bool operator==(const nsCSSValuePairList& aOther) const;
+-  bool operator!=(const nsCSSValuePairList& aOther) const
+-  { return !(*this == aOther); }
++  static bool Equal(const nsCSSValuePairList* aList1,
++                    const nsCSSValuePairList* aList2);
+ 
+   size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+ 
+@@ -1280,6 +1284,12 @@ private:
+   {
+     MOZ_COUNT_CTOR(nsCSSValuePairList);
+   }
++
++  // We don't want operator== or operator!= because they wouldn't be
++  // null-safe, which is generally what we need.  Use |Equal| method
++  // above instead.
++  bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE;
++  bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE;
+ };
+ 
+ // nsCSSValuePairList_heap differs from nsCSSValuePairList only in being

Added: head/www/libxul/files/patch-bug1083461
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/libxul/files/patch-bug1083461	Tue Jan 20 23:59:03 2015	(r377564)
@@ -0,0 +1,156 @@
+commit c97894b
+Author: L. David Baron <dbaron at dbaron.org>
+Date:   Sun Oct 19 23:31:39 2014 -0400
+
+    Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers.  r=bzbarsky  approval-mozilla-esr31=bkerensa
+---
+ layout/style/nsCSSValue.cpp       | 28 ++++++++++++++++------------
+ layout/style/nsCSSValue.h         | 22 ++++++++++++++++------
+ layout/style/nsStyleAnimation.cpp |  6 ++++--
+ 3 files changed, 36 insertions(+), 20 deletions(-)
+
+diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp
+index 781ef65..4bbc979 100644
+--- layout/style/nsCSSValue.cpp
++++ layout/style/nsCSSValue.cpp
+@@ -253,13 +253,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const
+       return *mValue.mRect == *aOther.mValue.mRect;
+     }
+     else if (eCSSUnit_List == mUnit) {
+-      return *mValue.mList == *aOther.mValue.mList;
++      return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList);
+     }
+     else if (eCSSUnit_SharedList == mUnit) {
+       return *mValue.mSharedList == *aOther.mValue.mSharedList;
+     }
+     else if (eCSSUnit_PairList == mUnit) {
+-      return *mValue.mPairList == *aOther.mValue.mPairList;
++      return nsCSSValuePairList::Equal(mValue.mPairList,
++                                       aOther.mValue.mPairList);
+     }
+     else if (eCSSUnit_GridTemplateAreas == mUnit) {
+       return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas;
+@@ -1740,13 +1741,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+   }
+ }
+ 
+-bool
+-nsCSSValueList::operator==(const nsCSSValueList& aOther) const
++/* static */ bool
++nsCSSValueList::Equal(const nsCSSValueList* aList1,
++                      const nsCSSValueList* aList2)
+ {
+-  if (this == &aOther)
++  if (aList1 == aList2) {
+     return true;
++  }
+ 
+-  const nsCSSValueList *p1 = this, *p2 = &aOther;
++  const nsCSSValueList *p1 = aList1, *p2 = aList2;
+   for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
+     if (p1->mValue != p2->mValue)
+       return false;
+@@ -1799,8 +1802,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult
+ bool
+ nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const
+ {
+-  return !mHead == !aOther.mHead &&
+-         (!mHead || *mHead == *aOther.mHead);
++  return nsCSSValueList::Equal(mHead, aOther.mHead);
+ }
+ 
+ size_t
+@@ -2010,13 +2012,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty,
+   }
+ }
+ 
+-bool
+-nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const
++/* static */ bool
++nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1,
++                          const nsCSSValuePairList* aList2)
+ {
+-  if (this == &aOther)
++  if (aList1 == aList2) {
+     return true;
++  }
+ 
+-  const nsCSSValuePairList *p1 = this, *p2 = &aOther;
++  const nsCSSValuePairList *p1 = aList1, *p2 = aList2;
+   for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
+     if (p1->mXValue != p2->mXValue ||
+         p1->mYValue != p2->mYValue)
+diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h
+index 753938c..77eeef0 100644
+--- layout/style/nsCSSValue.h
++++ layout/style/nsCSSValue.h
+@@ -806,9 +806,8 @@ struct nsCSSValueList {
+   void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+                       nsCSSValue::Serialization aValueSerialization) const;
+ 
+-  bool operator==(nsCSSValueList const& aOther) const;
+-  bool operator!=(const nsCSSValueList& aOther) const
+-  { return !(*this == aOther); }
++  static bool Equal(const nsCSSValueList* aList1,
++                    const nsCSSValueList* aList2);
+ 
+   size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+ 
+@@ -821,6 +820,12 @@ private:
+   {
+     MOZ_COUNT_CTOR(nsCSSValueList);
+   }
++
++  // We don't want operator== or operator!= because they wouldn't be
++  // null-safe, which is generally what we need.  Use |Equal| method
++  // above instead.
++  bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE;
++  bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE;
+ };
+ 
+ // nsCSSValueList_heap differs from nsCSSValueList only in being
+@@ -1199,9 +1204,8 @@ struct nsCSSValuePairList {
+   void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+                       nsCSSValue::Serialization aValueSerialization) const;
+ 
+-  bool operator==(const nsCSSValuePairList& aOther) const;
+-  bool operator!=(const nsCSSValuePairList& aOther) const
+-  { return !(*this == aOther); }
++  static bool Equal(const nsCSSValuePairList* aList1,
++                    const nsCSSValuePairList* aList2);
+ 
+   size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+ 
+@@ -1215,6 +1219,12 @@ private:
+   {
+     MOZ_COUNT_CTOR(nsCSSValuePairList);
+   }
++
++  // We don't want operator== or operator!= because they wouldn't be
++  // null-safe, which is generally what we need.  Use |Equal| method
++  // above instead.
++  bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE;
++  bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE;
+ };
+ 
+ // nsCSSValuePairList_heap differs from nsCSSValuePairList only in being
+diff --git layout/style/nsStyleAnimation.cpp layout/style/nsStyleAnimation.cpp
+index 6c2ccb0..8dbe404 100644
+--- layout/style/nsStyleAnimation.cpp
++++ layout/style/nsStyleAnimation.cpp
+@@ -3816,11 +3816,13 @@ nsStyleAnimation::Value::operator==(const Value& aOther) const
+     case eUnit_Filter:
+     case eUnit_Shadow:
+     case eUnit_BackgroundPosition:
+-      return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList;
++      return nsCSSValueList::Equal(mValue.mCSSValueList,
++                                   aOther.mValue.mCSSValueList);
+     case eUnit_Transform:
+       return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList;
+     case eUnit_CSSValuePairList:
+-      return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList;
++      return nsCSSValuePairList::Equal(mValue.mCSSValuePairList,
++                                       aOther.mValue.mCSSValuePairList);
+     case eUnit_UnparsedString:
+       return (NS_strcmp(GetStringBufferValue(),
+                         aOther.GetStringBufferValue()) == 0);

Added: head/www/seamonkey/files/patch-bug1083461
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/seamonkey/files/patch-bug1083461	Tue Jan 20 23:59:03 2015	(r377564)
@@ -0,0 +1,159 @@
+commit 87f367b
+Author: L. David Baron <dbaron at dbaron.org>
+Date:   Sun Oct 19 23:31:39 2014 -0400
+
+    Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers.  r=bzbarsky
+    
+    --HG--
+    extra : transplant_source : %CD%5D%9BE%FE%DE%A4%F2%B8%CF%D7%AE%84%90%3B%E8%A0d%D7%2B
+---
+ layout/style/StyleAnimationValue.cpp |  6 ++++--
+ layout/style/nsCSSValue.cpp          | 28 ++++++++++++++++------------
+ layout/style/nsCSSValue.h            | 22 ++++++++++++++++------
+ 3 files changed, 36 insertions(+), 20 deletions(-)
+
+diff --git layout/style/StyleAnimationValue.cpp layout/style/StyleAnimationValue.cpp
+index 40bc8bf..1898fe6 100644
+--- mozilla/layout/style/StyleAnimationValue.cpp
++++ mozilla/layout/style/StyleAnimationValue.cpp
+@@ -3851,11 +3851,13 @@ StyleAnimationValue::operator==(const StyleAnimationValue& aOther) const
+     case eUnit_Filter:
+     case eUnit_Shadow:
+     case eUnit_BackgroundPosition:
+-      return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList;
++      return nsCSSValueList::Equal(mValue.mCSSValueList,
++                                   aOther.mValue.mCSSValueList);
+     case eUnit_Transform:
+       return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList;
+     case eUnit_CSSValuePairList:
+-      return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList;
++      return nsCSSValuePairList::Equal(mValue.mCSSValuePairList,
++                                       aOther.mValue.mCSSValuePairList);
+     case eUnit_UnparsedString:
+       return (NS_strcmp(GetStringBufferValue(),
+                         aOther.GetStringBufferValue()) == 0);
+diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp
+index dcb8496..fefb4f9 100644
+--- mozilla/layout/style/nsCSSValue.cpp
++++ mozilla/layout/style/nsCSSValue.cpp
+@@ -264,13 +264,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const
+       return *mValue.mRect == *aOther.mValue.mRect;
+     }
+     else if (eCSSUnit_List == mUnit) {
+-      return *mValue.mList == *aOther.mValue.mList;
++      return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList);
+     }
+     else if (eCSSUnit_SharedList == mUnit) {
+       return *mValue.mSharedList == *aOther.mValue.mSharedList;
+     }
+     else if (eCSSUnit_PairList == mUnit) {
+-      return *mValue.mPairList == *aOther.mValue.mPairList;
++      return nsCSSValuePairList::Equal(mValue.mPairList,
++                                       aOther.mValue.mPairList);
+     }
+     else if (eCSSUnit_GridTemplateAreas == mUnit) {
+       return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas;
+@@ -1875,13 +1876,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+   }
+ }
+ 
+-bool
+-nsCSSValueList::operator==(const nsCSSValueList& aOther) const
++/* static */ bool
++nsCSSValueList::Equal(const nsCSSValueList* aList1,
++                      const nsCSSValueList* aList2)
+ {
+-  if (this == &aOther)
++  if (aList1 == aList2) {
+     return true;
++  }
+ 
+-  const nsCSSValueList *p1 = this, *p2 = &aOther;
++  const nsCSSValueList *p1 = aList1, *p2 = aList2;
+   for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
+     if (p1->mValue != p2->mValue)
+       return false;
+@@ -1934,8 +1937,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult
+ bool
+ nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const
+ {
+-  return !mHead == !aOther.mHead &&
+-         (!mHead || *mHead == *aOther.mHead);
++  return nsCSSValueList::Equal(mHead, aOther.mHead);
+ }
+ 
+ size_t
+@@ -2148,13 +2150,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty,
+   }
+ }
+ 
+-bool
+-nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const
++/* static */ bool
++nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1,
++                          const nsCSSValuePairList* aList2)
+ {
+-  if (this == &aOther)
++  if (aList1 == aList2) {
+     return true;
++  }
+ 
+-  const nsCSSValuePairList *p1 = this, *p2 = &aOther;
++  const nsCSSValuePairList *p1 = aList1, *p2 = aList2;
+   for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
+     if (p1->mXValue != p2->mXValue ||
+         p1->mYValue != p2->mYValue)
+diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h
+index 8418a2d..f0c4e63 100644
+--- mozilla/layout/style/nsCSSValue.h
++++ mozilla/layout/style/nsCSSValue.h
+@@ -871,9 +871,8 @@ struct nsCSSValueList {
+   void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+                       nsCSSValue::Serialization aValueSerialization) const;
+ 
+-  bool operator==(nsCSSValueList const& aOther) const;
+-  bool operator!=(const nsCSSValueList& aOther) const
+-  { return !(*this == aOther); }
++  static bool Equal(const nsCSSValueList* aList1,
++                    const nsCSSValueList* aList2);
+ 
+   size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+ 
+@@ -886,6 +885,12 @@ private:
+   {
+     MOZ_COUNT_CTOR(nsCSSValueList);
+   }
++
++  // We don't want operator== or operator!= because they wouldn't be
++  // null-safe, which is generally what we need.  Use |Equal| method
++  // above instead.
++  bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE;
++  bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE;
+ };
+ 
+ // nsCSSValueList_heap differs from nsCSSValueList only in being
+@@ -1264,9 +1269,8 @@ struct nsCSSValuePairList {
+   void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
+                       nsCSSValue::Serialization aValueSerialization) const;
+ 
+-  bool operator==(const nsCSSValuePairList& aOther) const;
+-  bool operator!=(const nsCSSValuePairList& aOther) const
+-  { return !(*this == aOther); }
++  static bool Equal(const nsCSSValuePairList* aList1,
++                    const nsCSSValuePairList* aList2);
+ 
+   size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+ 
+@@ -1280,6 +1284,12 @@ private:
+   {
+     MOZ_COUNT_CTOR(nsCSSValuePairList);
+   }
++
++  // We don't want operator== or operator!= because they wouldn't be
++  // null-safe, which is generally what we need.  Use |Equal| method
++  // above instead.
++  bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE;
++  bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE;
+ };
+ 
+ // nsCSSValuePairList_heap differs from nsCSSValuePairList only in being


More information about the svn-ports-all mailing list