2010-12-21 Daniel Bates <dbates@rim.com>
authordbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 21 Dec 2010 21:22:14 +0000 (21:22 +0000)
committerdbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 21 Dec 2010 21:22:14 +0000 (21:22 +0000)
        Reviewed by Eric Seidel and Darin Adler.

        Deallocate GregorianDateTime.timeZone (if allocated) when copying so that we don't leak memory.
        https://bugs.webkit.org/show_bug.cgi?id=51367

        Inspired by a patch by George Staikos.

        * wtf/DateMath.cpp:
        (JSC::msToGregorianDateTime): Modified to set timeZone to nullptr since timeZone is now
        of type OwnPtrArray<char>.
        * wtf/DateMath.h: Change timeZone to type OwnArrayPtr<char>; Removed destructor since it is no longer needed.
        (JSC::GregorianDateTime::GregorianDateTime): Modified to use OwnPtrArray semantics for timeZone.
        (JSC::GregorianDateTime::operator tm): Ditto.
        (JSC::GregorianDateTime::copyFrom): Ditto.
2010-12-21  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel and Darin Adler.

        Deallocate GregorianDateTime.timeZone (if allocated) when copying so that we don't leak memory.
        https://bugs.webkit.org/show_bug.cgi?id=51367

        Add forwarding header for PassOwnArrayPtr.h.

        * ForwardingHeaders/wtf/PassOwnArrayPtr.h: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@74424 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/wtf/DateMath.cpp
JavaScriptCore/wtf/DateMath.h
JavaScriptGlue/ChangeLog
JavaScriptGlue/ForwardingHeaders/wtf/PassOwnArrayPtr.h [new file with mode: 0644]

index d80093e..a7ccfe5 100644 (file)
@@ -1,3 +1,20 @@
+2010-12-21  Daniel Bates  <dbates@rim.com>
+
+        Reviewed by Eric Seidel and Darin Adler.
+
+        Deallocate GregorianDateTime.timeZone (if allocated) when copying so that we don't leak memory.
+        https://bugs.webkit.org/show_bug.cgi?id=51367
+
+        Inspired by a patch by George Staikos.
+
+        * wtf/DateMath.cpp:
+        (JSC::msToGregorianDateTime): Modified to set timeZone to nullptr since timeZone is now
+        of type OwnPtrArray<char>.
+        * wtf/DateMath.h: Change timeZone to type OwnArrayPtr<char>; Removed destructor since it is no longer needed.
+        (JSC::GregorianDateTime::GregorianDateTime): Modified to use OwnPtrArray semantics for timeZone.
+        (JSC::GregorianDateTime::operator tm): Ditto.
+        (JSC::GregorianDateTime::copyFrom): Ditto.
+
 2010-12-21  Sheriff Bot  <webkit.review.bot@gmail.com>
 
         Unreviewed, rolling out r74402.
index 675f093..8873352 100644 (file)
@@ -1129,7 +1129,7 @@ void msToGregorianDateTime(ExecState* exec, double ms, bool outputIsUTC, Gregori
     tm.year     =  year - 1900;
     tm.isDST    =  dstOff != 0.0;
     tm.utcOffset = static_cast<long>((dstOff + utcOff) / WTF::msPerSecond);
-    tm.timeZone = NULL;
+    tm.timeZone = nullptr;
 }
 
 double parseDateFromNullTerminatedCharacters(ExecState* exec, const char* dateString)
index cb84708..8d0d932 100644 (file)
@@ -2,6 +2,7 @@
  * Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
  * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
  * Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2010 Research In Motion Limited. All rights reserved.
  *
  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  *
@@ -47,6 +48,8 @@
 #include <time.h>
 #include <wtf/CurrentTime.h>
 #include <wtf/Noncopyable.h>
+#include <wtf/OwnArrayPtr.h>
+#include <wtf/PassOwnArrayPtr.h>
 #include <wtf/UnusedParam.h>
 
 namespace WTF {
@@ -90,6 +93,7 @@ double calculateDSTOffset(double ms, double utcOffset);
 
 } // namespace WTF
 
+using WTF::adoptArrayPtr;
 using WTF::dateToDaysFrom1970;
 using WTF::dayInMonthFromDayInYear;
 using WTF::dayInYear;
@@ -132,11 +136,6 @@ struct GregorianDateTime : Noncopyable {
     {
     }
 
-    ~GregorianDateTime()
-    {
-        delete [] timeZone;
-    }
-
     GregorianDateTime(ExecState* exec, const tm& inTm)
         : second(inTm.tm_sec)
         , minute(inTm.tm_min)
@@ -157,10 +156,10 @@ struct GregorianDateTime : Noncopyable {
 
 #if HAVE(TM_ZONE)
         int inZoneSize = strlen(inTm.tm_zone) + 1;
-        timeZone = new char[inZoneSize];
-        strncpy(timeZone, inTm.tm_zone, inZoneSize);
+        timeZone = adoptArrayPtr(new char[inZoneSize]);
+        strncpy(timeZone.get(), inTm.tm_zone, inZoneSize);
 #else
-        timeZone = 0;
+        timeZone = nullptr;
 #endif
     }
 
@@ -183,7 +182,7 @@ struct GregorianDateTime : Noncopyable {
         ret.tm_gmtoff = static_cast<long>(utcOffset);
 #endif
 #if HAVE(TM_ZONE)
-        ret.tm_zone = timeZone;
+        ret.tm_zone = timeZone.get();
 #endif
 
         return ret;
@@ -202,11 +201,11 @@ struct GregorianDateTime : Noncopyable {
         isDST = rhs.isDST;
         utcOffset = rhs.utcOffset;
         if (rhs.timeZone) {
-            int inZoneSize = strlen(rhs.timeZone) + 1;
-            timeZone = new char[inZoneSize];
-            strncpy(timeZone, rhs.timeZone, inZoneSize);
+            int inZoneSize = strlen(rhs.timeZone.get()) + 1;
+            timeZone = adoptArrayPtr(new char[inZoneSize]);
+            strncpy(timeZone.get(), rhs.timeZone.get(), inZoneSize);
         } else
-            timeZone = 0;
+            timeZone = nullptr;
     }
 
     int second;
@@ -219,7 +218,7 @@ struct GregorianDateTime : Noncopyable {
     int year;
     int isDST;
     int utcOffset;
-    char* timeZone;
+    OwnArrayPtr<char> timeZone;
 };
 
 static inline int gmtoffset(const GregorianDateTime& t)
index 8485701..e16f588 100644 (file)
@@ -1,3 +1,14 @@
+2010-12-21  Daniel Bates  <dbates@rim.com>
+
+        Reviewed by Eric Seidel and Darin Adler.
+
+        Deallocate GregorianDateTime.timeZone (if allocated) when copying so that we don't leak memory.
+        https://bugs.webkit.org/show_bug.cgi?id=51367
+
+        Add forwarding header for PassOwnArrayPtr.h.
+
+        * ForwardingHeaders/wtf/PassOwnArrayPtr.h: Added.
+
 2010-12-18  Gavin Barraclough  <barraclough@apple.com>
 
         Reviewed by Oliver Hunt.
diff --git a/JavaScriptGlue/ForwardingHeaders/wtf/PassOwnArrayPtr.h b/JavaScriptGlue/ForwardingHeaders/wtf/PassOwnArrayPtr.h
new file mode 100644 (file)
index 0000000..97f4a9d
--- /dev/null
@@ -0,0 +1 @@
+#include <JavaScriptCore/PassOwnArrayPtr.h>