felipe                                   Wed, 23 Nov 2011 01:20:49 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=319705

Log:
- Fixed memory leak when calling the Finfo constructor twice

Changed paths:
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/ext/fileinfo/fileinfo.c
    A   php/php-src/branches/PHP_5_3/ext/fileinfo/tests/finfo_open_002.phpt
    U   php/php-src/branches/PHP_5_4/NEWS
    U   php/php-src/branches/PHP_5_4/ext/fileinfo/fileinfo.c
    A   php/php-src/branches/PHP_5_4/ext/fileinfo/tests/finfo_open_002.phpt
    U   php/php-src/trunk/ext/fileinfo/fileinfo.c
    A   php/php-src/trunk/ext/fileinfo/tests/finfo_open_002.phpt

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2011-11-22 22:11:15 UTC (rev 319704)
+++ php/php-src/branches/PHP_5_3/NEWS   2011-11-23 01:20:49 UTC (rev 319705)
@@ -30,6 +30,7 @@

 - Fileinfo:
   . Fixed possible memory leak in finfo_open(). (Felipe)
+  . Fixed memory leak when calling the Finfo constructor twice. (Felipe)

 - Intl:
   . Fixed bug #60192 (SegFault when Collator not constructed

Modified: php/php-src/branches/PHP_5_3/ext/fileinfo/fileinfo.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/fileinfo/fileinfo.c        2011-11-22 
22:11:15 UTC (rev 319704)
+++ php/php-src/branches/PHP_5_3/ext/fileinfo/fileinfo.c        2011-11-23 
01:20:49 UTC (rev 319705)
@@ -290,6 +290,16 @@
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ls", &options, 
&file, &file_len) == FAILURE) {
                RETURN_FALSE;
        }
+
+       if (object) {
+               struct finfo_object *finfo_obj = (struct 
finfo_object*)zend_object_store_get_object(object TSRMLS_CC);
+
+               if (finfo_obj->ptr) {
+                       magic_close(finfo_obj->ptr->magic);
+                       efree(finfo_obj->ptr);
+                       finfo_obj->ptr = NULL;
+               }
+       }

        if (file_len == 0) {
                file = NULL;

Added: php/php-src/branches/PHP_5_3/ext/fileinfo/tests/finfo_open_002.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/fileinfo/tests/finfo_open_002.phpt         
                (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/fileinfo/tests/finfo_open_002.phpt 
2011-11-23 01:20:49 UTC (rev 319705)
@@ -0,0 +1,17 @@
+--TEST--
+FileInfo - Calling the constructor twice
+--SKIPIF--
+<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
+--FILE--
+<?php
+
+$x = new finfo;
+$x->finfo();
+
+echo "done!\n";
+
+?>
+--EXPECTF--
+done!
+
+

Modified: php/php-src/branches/PHP_5_4/NEWS
===================================================================
--- php/php-src/branches/PHP_5_4/NEWS   2011-11-22 22:11:15 UTC (rev 319704)
+++ php/php-src/branches/PHP_5_4/NEWS   2011-11-23 01:20:49 UTC (rev 319705)
@@ -33,6 +33,7 @@

 - Fileinfo:
   . Fixed possible memory leak in finfo_open(). (Felipe)
+  . Fixed memory leak when calling the Finfo constructor twice. (Felipe)

 - Intl:
   . Fixed memory leak in several Intl locale functions. (Felipe)

Modified: php/php-src/branches/PHP_5_4/ext/fileinfo/fileinfo.c
===================================================================
--- php/php-src/branches/PHP_5_4/ext/fileinfo/fileinfo.c        2011-11-22 
22:11:15 UTC (rev 319704)
+++ php/php-src/branches/PHP_5_4/ext/fileinfo/fileinfo.c        2011-11-23 
01:20:49 UTC (rev 319705)
@@ -289,6 +289,16 @@
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lp", &options, 
&file, &file_len) == FAILURE) {
                RETURN_FALSE;
        }
+
+       if (object) {
+               struct finfo_object *finfo_obj = (struct 
finfo_object*)zend_object_store_get_object(object TSRMLS_CC);
+
+               if (finfo_obj->ptr) {
+                       magic_close(finfo_obj->ptr->magic);
+                       efree(finfo_obj->ptr);
+                       finfo_obj->ptr = NULL;
+               }
+       }

        if (file_len == 0) {
                file = NULL;

Added: php/php-src/branches/PHP_5_4/ext/fileinfo/tests/finfo_open_002.phpt
===================================================================
--- php/php-src/branches/PHP_5_4/ext/fileinfo/tests/finfo_open_002.phpt         
                (rev 0)
+++ php/php-src/branches/PHP_5_4/ext/fileinfo/tests/finfo_open_002.phpt 
2011-11-23 01:20:49 UTC (rev 319705)
@@ -0,0 +1,17 @@
+--TEST--
+FileInfo - Calling the constructor twice
+--SKIPIF--
+<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
+--FILE--
+<?php
+
+$x = new finfo;
+$x->finfo();
+
+echo "done!\n";
+
+?>
+--EXPECTF--
+done!
+
+

Modified: php/php-src/trunk/ext/fileinfo/fileinfo.c
===================================================================
--- php/php-src/trunk/ext/fileinfo/fileinfo.c   2011-11-22 22:11:15 UTC (rev 
319704)
+++ php/php-src/trunk/ext/fileinfo/fileinfo.c   2011-11-23 01:20:49 UTC (rev 
319705)
@@ -289,6 +289,16 @@
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lp", &options, 
&file, &file_len) == FAILURE) {
                RETURN_FALSE;
        }
+
+       if (object) {
+               struct finfo_object *finfo_obj = (struct 
finfo_object*)zend_object_store_get_object(object TSRMLS_CC);
+
+               if (finfo_obj->ptr) {
+                       magic_close(finfo_obj->ptr->magic);
+                       efree(finfo_obj->ptr);
+                       finfo_obj->ptr = NULL;
+               }
+       }

        if (file_len == 0) {
                file = NULL;

Added: php/php-src/trunk/ext/fileinfo/tests/finfo_open_002.phpt
===================================================================
--- php/php-src/trunk/ext/fileinfo/tests/finfo_open_002.phpt                    
        (rev 0)
+++ php/php-src/trunk/ext/fileinfo/tests/finfo_open_002.phpt    2011-11-23 
01:20:49 UTC (rev 319705)
@@ -0,0 +1,17 @@
+--TEST--
+FileInfo - Calling the constructor twice
+--SKIPIF--
+<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
+--FILE--
+<?php
+
+$x = new finfo;
+$x->finfo();
+
+echo "done!\n";
+
+?>
+--EXPECTF--
+done!
+
+

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

Reply via email to