iliaa           Tue Jun 14 19:40:57 2005 EDT

  Modified files:              
    /php-src/ext/date   php_date.c 
    /php-src/ext/date/lib       datetime.c 
  Log:
  Fixed memory leaks.
  
  
http://cvs.php.net/diff.php/php-src/ext/date/php_date.c?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/date/php_date.c
diff -u php-src/ext/date/php_date.c:1.1 php-src/ext/date/php_date.c:1.2
--- php-src/ext/date/php_date.c:1.1     Tue Jun 14 17:32:27 2005
+++ php-src/ext/date/php_date.c Tue Jun 14 19:40:56 2005
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_date.c,v 1.1 2005/06/14 21:32:27 derick Exp $ */
+/* $Id: php_date.c,v 1.2 2005/06/14 23:40:56 iliaa Exp $ */
 
 #include "php.h"
 #include "php_streams.h"
@@ -128,6 +128,7 @@
                now = timelib_time_ctor();
                timelib_unixtime2local(now, (signed long long) time(NULL), tzi);
        } else {
+               timelib_tzinfo_ctor(tzi);
                RETURN_FALSE;
        }
 
@@ -135,6 +136,16 @@
        timelib_fill_holes(t, now, 0);
        timelib_update_ts(t, tzi);
        ts = timelib_date_to_int(t, &error);
+
+       /* if tz_info is not a copy, avoid double free */
+       if (now->tz_info == tzi) {
+               now->tz_info = NULL;
+       }
+
+       timelib_time_dtor(now); 
+       timelib_time_dtor(t);
+       timelib_tzinfo_dtor(tzi);
+
        if (error) {
                RETURN_FALSE;
        } else {
http://cvs.php.net/diff.php/php-src/ext/date/lib/datetime.c?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/date/lib/datetime.c
diff -u php-src/ext/date/lib/datetime.c:1.1 php-src/ext/date/lib/datetime.c:1.2
--- php-src/ext/date/lib/datetime.c:1.1 Tue Jun 14 17:32:27 2005
+++ php-src/ext/date/lib/datetime.c     Tue Jun 14 19:40:57 2005
@@ -16,12 +16,18 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: datetime.c,v 1.1 2005/06/14 21:32:27 derick Exp $ */
+/* $Id: datetime.c,v 1.2 2005/06/14 23:40:57 iliaa Exp $ */
 
 #include "timelib_structs.h"
 #include "datetime.h"
 #include <ctype.h>
 
+#define PHP_TIME_FREE(m)       \
+       if (m) {                \
+               free(m);        \
+               m = NULL;       \
+       }                       \
+
 timelib_time* timelib_time_ctor()
 {
        timelib_time *t;
@@ -33,10 +39,8 @@
 void timelib_time_tz_abbr_update(timelib_time* tm, char* tz_abbr)
 {
        int i;
-
-       if (tm->tz_abbr) {
-               free(tm->tz_abbr);
-       }
+       
+       PHP_TIME_FREE(tm->tz_abbr);
        tm->tz_abbr = strdup(tz_abbr);
        for (i = 0; i < strlen(tz_abbr); i++) {
                tm->tz_abbr[i] = toupper(tz_abbr[i]);
@@ -45,10 +49,12 @@
 
 void timelib_time_dtor(timelib_time* t)
 {
-       if (t->tz_abbr) {
-               free(t->tz_abbr);
+       PHP_TIME_FREE(t->tz_abbr);
+       if (t->tz_info) {
+               timelib_tzinfo_dtor(t->tz_info);
+               t->tz_info = NULL;
        }
-       free(t);
+       PHP_TIME_FREE(t);
 }
 
 timelib_time_offset* timelib_time_offset_ctor()
@@ -61,10 +67,8 @@
 
 void timelib_time_offset_dtor(timelib_time_offset* t)
 {
-       if (t->abbr) {
-               free(t->abbr);
-       }
-       free(t);
+       PHP_TIME_FREE(t->abbr);
+       PHP_TIME_FREE(t);
 }
 
 timelib_tzinfo* timelib_tzinfo_ctor(char *name)
@@ -105,13 +109,13 @@
 
 void timelib_tzinfo_dtor(timelib_tzinfo *tz)
 {
-       free(tz->name);
-       free(tz->trans);
-       free(tz->trans_idx);
-       free(tz->type);
-       free(tz->timezone_abbr);
-       free(tz->leap_times);
-       free(tz);
+       PHP_TIME_FREE(tz->name);
+       PHP_TIME_FREE(tz->trans);
+       PHP_TIME_FREE(tz->trans_idx);
+       PHP_TIME_FREE(tz->type);
+       PHP_TIME_FREE(tz->timezone_abbr);
+       PHP_TIME_FREE(tz->leap_times);
+       PHP_TIME_FREE(tz);
 }
 
 char *timelib_get_tz_abbr_ptr(timelib_time *t)

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to