tony2001                Tue Aug 19 15:16:33 2008 UTC

  Modified files:              (Branch: PHP_5_3)
    /php-src/ext/standard       browscap.c 
  Log:
  MFH: fix memleak in browscap code (noticed by Gopal)
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/browscap.c?r1=1.85.2.2.2.3.2.7&r2=1.85.2.2.2.3.2.8&diff_format=u
Index: php-src/ext/standard/browscap.c
diff -u php-src/ext/standard/browscap.c:1.85.2.2.2.3.2.7 
php-src/ext/standard/browscap.c:1.85.2.2.2.3.2.8
--- php-src/ext/standard/browscap.c:1.85.2.2.2.3.2.7    Thu Aug  7 12:50:17 2008
+++ php-src/ext/standard/browscap.c     Tue Aug 19 15:16:33 2008
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: browscap.c,v 1.85.2.2.2.3.2.7 2008/08/07 12:50:17 nlopess Exp $ */
+/* $Id: browscap.c,v 1.85.2.2.2.3.2.8 2008/08/19 15:16:33 tony2001 Exp $ */
 
 #include "php.h"
 #include "php_browscap.h"
@@ -118,7 +118,8 @@
                                char *new_key;
 
                                /* parent entry can not be same as current 
section -> causes infinite loop! */
-                               if (!strcasecmp(Z_STRVAL_P(arg1), "parent") &&
+                               if (!strcasecmp(Z_STRVAL_P(arg1), "parent") && 
+                                       current_section_name != NULL &&
                                        !strcasecmp(current_section_name, 
Z_STRVAL_P(arg2))
                                ) {
                                        zend_error(E_CORE_ERROR, "Invalid 
browscap ini file: 'Parent' value can not be same as the section name: %s (in 
file %s)", current_section_name, INI_STR("browscap"));
@@ -171,6 +172,9 @@
                                zend_hash_init(section_properties, 0, NULL, 
(dtor_func_t) browscap_entry_dtor, 1);
                                Z_ARRVAL_P(current_section) = 
section_properties;
                                Z_TYPE_P(current_section) = IS_ARRAY;
+                               if (current_section_name) {
+                                       free(current_section_name);
+                               }
                                current_section_name = 
zend_strndup(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1));
 
                                zend_hash_update(&browser_hash, 
Z_STRVAL_P(arg1), Z_STRLEN_P(arg1) + 1, (void *) &current_section, sizeof(zval 
*), NULL);
@@ -213,7 +217,12 @@
                }
                fh.filename = browscap;
                Z_TYPE(fh) = ZEND_HANDLE_FP;
+               current_section_name = NULL;
                zend_parse_ini_file(&fh, 1, ZEND_INI_SCANNER_RAW, 
(zend_ini_parser_cb_t) php_browscap_parser_cb, &browser_hash TSRMLS_CC);
+               if (current_section_name) {
+                       free(current_section_name);
+                       current_section_name = NULL;
+               }
        }
 
        return SUCCESS;



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

Reply via email to