iliaa           Sat Sep 22 15:38:00 2007 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src/ext/standard       array.c 
  Log:
  Fixed memory leak inside array_intersec (coverity issues #403,#404)
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.308.2.21.2.36&r2=1.308.2.21.2.37&diff_format=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.308.2.21.2.36 
php-src/ext/standard/array.c:1.308.2.21.2.37
--- php-src/ext/standard/array.c:1.308.2.21.2.36        Sat Sep 22 15:32:11 2007
+++ php-src/ext/standard/array.c        Sat Sep 22 15:38:00 2007
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: array.c,v 1.308.2.21.2.36 2007/09/22 15:32:11 iliaa Exp $ */
+/* $Id: array.c,v 1.308.2.21.2.37 2007/09/22 15:38:00 iliaa Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -3156,10 +3156,12 @@
                                intersect_data_compare_func = 
array_user_compare;
                                BG(user_compare_func_name) = args[arr_argc + 
1];/* data - key */
                } else {
+                       efree(args);
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, 
"data_compare_type is %d. key_compare_type is %d. This should never happen. 
Please report as a bug.", data_compare_type, key_compare_type);
                        return;
                }               
        } else {
+               efree(args);
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "behavior is %d. 
This should never happen. Please report as a bug", behavior);
                return;
        }
@@ -3178,6 +3180,9 @@
                hash = HASH_OF(*args[i]);
                list = (Bucket **) pemalloc((hash->nNumOfElements + 1) * 
sizeof(Bucket *), hash->persistent);
                if (!list) {
+                       efree(args);
+                       efree(lists);
+                       efree(ptrs);
                        RETURN_FALSE;
                }
                lists[i] = list;
@@ -3612,10 +3617,12 @@
                        diff_data_compare_func = array_user_compare;
                        BG(user_compare_func_name) = args[arr_argc + 1];/* data 
- key*/
                } else {
+                       efree(args);
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, 
"data_compare_type is %d. key_compare_type is %d. This should never happen. 
Please report as a bug", data_compare_type, key_compare_type);
                        return; 
                }                       
        } else {
+               efree(args);
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "behavior is %d. 
This should never happen. Please report as a bug", behavior);
                return; 
        }
@@ -3634,6 +3641,7 @@
                hash = HASH_OF(*args[i]);
                list = (Bucket **) pemalloc((hash->nNumOfElements + 1) * 
sizeof(Bucket *), hash->persistent);
                if (!list) {
+                       efree(args);
                        efree(ptrs);
                        efree(lists);
                        RETURN_FALSE;

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

Reply via email to