Bug 1448297 - Assume contiguous XPCOM strings in nsCookie.cpp. draft
authorHenri Sivonen <hsivonen@hsivonen.fi>
Fri, 23 Mar 2018 14:16:23 +0200
changeset 771567 d77b9cd1f374cd84ded7841c846b38c33a22dafd
parent 771565 ecfe6af12904ddf4961fe24083dd7d70b49d8df6
child 772011 8f8f5a6c65c6190c4ed618e36f585f6f437d1439
push id103715
push userbmo:hsivonen@hsivonen.fi
push dateFri, 23 Mar 2018 12:16:51 +0000
bugs1448297
milestone61.0a1
Bug 1448297 - Assume contiguous XPCOM strings in nsCookie.cpp. MozReview-Commit-ID: 8aOh13vz6lM
netwerk/cookie/nsCookie.cpp
--- a/netwerk/cookie/nsCookie.cpp
+++ b/netwerk/cookie/nsCookie.cpp
@@ -22,27 +22,40 @@ StrBlockCopy(const nsACString &aSource1,
              const nsACString &aSource3,
              const nsACString &aSource4,
              char             *&aDest1,
              char             *&aDest2,
              char             *&aDest3,
              char             *&aDest4,
              char             *&aDestEnd)
 {
-  char *toBegin = aDest1;
-  nsACString::const_iterator fromBegin, fromEnd;
+  size_t len1 = aSource1.Length();
+  memcpy(aDest1, aSource1.BeginReading(), len1);
+  aDest1[len1] = 0;
+
+  aDest2 = aDest1 + len1 + 1;
+
+  size_t len2 = aSource2.Length();
+  memcpy(aDest2, aSource2.BeginReading(), len2);
+  aDest2[len2] = 0;
+
+  aDest3 = aDest2 + len2 + 1;
 
-  *copy_string(aSource1.BeginReading(fromBegin), aSource1.EndReading(fromEnd), toBegin) = char(0);
-  aDest2 = ++toBegin;
-  *copy_string(aSource2.BeginReading(fromBegin), aSource2.EndReading(fromEnd), toBegin) = char(0);
-  aDest3 = ++toBegin;
-  *copy_string(aSource3.BeginReading(fromBegin), aSource3.EndReading(fromEnd), toBegin) = char(0);
-  aDest4 = ++toBegin;
-  *copy_string(aSource4.BeginReading(fromBegin), aSource4.EndReading(fromEnd), toBegin) = char(0);
-  aDestEnd = toBegin;
+  size_t len3 = aSource3.Length();
+  memcpy(aDest3, aSource3.BeginReading(), len3);
+  aDest3[len3] = 0;
+
+  aDest4 = aDest3 + len3 + 1;
+
+  size_t len4 = aSource4.Length();
+  memcpy(aDest4, aSource4.BeginReading(), len4);
+  aDest4[len4] = 0;
+
+  // Intentionally no + 1 here!
+  aDestEnd = aDest4 + len4;
 }
 
 /******************************************************************************
  * nsCookie:
  * creation helper
  ******************************************************************************/
 
 // This is a counter that keeps track of the last used creation time, each time