andrei          Tue Jan 25 17:00:15 2005 EDT

  Modified files:              (Branch: PHP_5_0)
    /php-src    NEWS 
    /php-src/ext/standard       browscap.c 
    /php-src/sapi/embed php_embed.c 
  Log:
  MFB (Fix several egregious leaks in ext/browscap and sapi/embed).
  
  
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1760.2.213&r2=1.1760.2.214&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.1760.2.213 php-src/NEWS:1.1760.2.214
--- php-src/NEWS:1.1760.2.213   Tue Jan 25 08:43:27 2005
+++ php-src/NEWS        Tue Jan 25 17:00:11 2005
@@ -1,6 +1,7 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2005, PHP 5.0.4
+- Fixed several egregious leaks in ext/browscap and sapi/embed. (Andrei)
 - Added Oracle Instant Client support. (cjbj at hotmail dot com, Tony)
 - Added length and charsetnr for field array and object in mysqli. (Georg)
 - Changed foreach() to throw an exception if IteratorAggregate::getIterator()
http://cvs.php.net/diff.php/php-src/ext/standard/browscap.c?r1=1.82&r2=1.82.2.1&ty=u
Index: php-src/ext/standard/browscap.c
diff -u php-src/ext/standard/browscap.c:1.82 
php-src/ext/standard/browscap.c:1.82.2.1
--- php-src/ext/standard/browscap.c:1.82        Mon Mar 15 16:26:39 2004
+++ php-src/ext/standard/browscap.c     Tue Jan 25 17:00:14 2005
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: browscap.c,v 1.82 2004/03/15 21:26:39 jay Exp $ */
+/* $Id: browscap.c,v 1.82.2.1 2005/01/25 22:00:14 andrei Exp $ */
 
 #include "php.h"
 #include "php_regex.h"
@@ -33,12 +33,17 @@
 
 /* OBJECTS_FIXME: This whole extension needs going through. The use of objects 
looks pretty broken here */
 
-static void browscap_entry_dtor(zval *pvalue)
+static void browscap_entry_dtor(zval **pvalue)
 {
-       if (Z_TYPE_P(pvalue) == IS_ARRAY) {
-               zend_hash_destroy(Z_ARRVAL_P(pvalue));
-               free(Z_ARRVAL_P(pvalue));
+       if (Z_TYPE_PP(pvalue) == IS_ARRAY) {
+               zend_hash_destroy(Z_ARRVAL_PP(pvalue));
+               free(Z_ARRVAL_PP(pvalue));
+       } else if (Z_TYPE_PP(pvalue) == IS_STRING) {
+               if (Z_STRVAL_PP(pvalue) && Z_STRVAL_PP(pvalue) != empty_string) 
{
+                       free(Z_STRVAL_PP(pvalue));
+               }
        }
+       free(*pvalue);
 }
 
 /* {{{ convert_browscap_pattern
@@ -97,7 +102,7 @@
 
                                new_property = (zval *) malloc(sizeof(zval));
                                INIT_PZVAL(new_property);
-                               Z_STRVAL_P(new_property) = 
Z_STRLEN_P(arg2)?zend_strndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2)):"";
+                               Z_STRVAL_P(new_property) = 
Z_STRLEN_P(arg2)?zend_strndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2)):empty_string;
                                Z_STRLEN_P(new_property) = Z_STRLEN_P(arg2);
                                Z_TYPE_P(new_property) = IS_STRING;
 
@@ -123,6 +128,7 @@
                                section_properties = (HashTable *) 
malloc(sizeof(HashTable));
                                zend_hash_init(section_properties, 0, NULL, 
(dtor_func_t) browscap_entry_dtor, 1);
                                current_section->value.ht = section_properties;
+                               current_section->type = IS_ARRAY;
                                zend_hash_update(&browser_hash, 
Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, (void *) &current_section, sizeof(zval 
*), NULL);
 
                                Z_STRVAL_P(processed) = Z_STRVAL_P(arg1);
http://cvs.php.net/diff.php/php-src/sapi/embed/php_embed.c?r1=1.8&r2=1.8.2.1&ty=u
Index: php-src/sapi/embed/php_embed.c
diff -u php-src/sapi/embed/php_embed.c:1.8 
php-src/sapi/embed/php_embed.c:1.8.2.1
--- php-src/sapi/embed/php_embed.c:1.8  Thu Jan  8 03:18:11 2004
+++ php-src/sapi/embed/php_embed.c      Tue Jan 25 17:00:14 2005
@@ -15,7 +15,7 @@
    | Author: Edin Kadribasic <[EMAIL PROTECTED]>                              |
    +----------------------------------------------------------------------+
 */
-/* $Id: php_embed.c,v 1.8 2004/01/08 08:18:11 andi Exp $ */
+/* $Id: php_embed.c,v 1.8.2.1 2005/01/25 22:00:14 andrei Exp $ */
 
 #include "php_embed.h"
 
@@ -210,6 +210,7 @@
 {
        php_request_shutdown((void *) 0);
        php_module_shutdown(TSRMLS_C);
+       sapi_shutdown();
 #ifdef ZTS
     tsrm_shutdown();
 #endif

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

Reply via email to