iliaa Thu Jul 8 13:07:26 2004 EDT
Modified files: (Branch: PHP_4_3)
/php-src NEWS
/php-src/ext/standard array.c
Log:
MFH: Fixed bug #29049 (array sorting via user function/method does not
validate it).
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1247.2.696&r2=1.1247.2.697&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.1247.2.696 php-src/NEWS:1.1247.2.697
--- php-src/NEWS:1.1247.2.696 Tue Jul 6 18:16:46 2004
+++ php-src/NEWS Thu Jul 8 13:07:25 2004
@@ -4,6 +4,8 @@
- Updated PCRE to provide better error handling in certain cases. (Andrei)
- NSAPI: added "bucket" parameter to list of non-php.ini-keys of php4_execute
for doing performance stats without warnings in server-log. (Uwe Schindler)
+- Fixed bug #29049 (array sorting via user function/method does not validate
+ it). (Ilia)
- Fixed bug #29034 (wordwrap() returns a boolean when passed empty string).
(Ilia)
- Fixed bug #28963 (Missing space for \0 in address allocation). (Ilia)
http://cvs.php.net/diff.php/php-src/ext/standard/array.c?r1=1.199.2.32&r2=1.199.2.33&ty=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.199.2.32 php-src/ext/standard/array.c:1.199.2.33
--- php-src/ext/standard/array.c:1.199.2.32 Thu Apr 1 14:07:01 2004
+++ php-src/ext/standard/array.c Thu Jul 8 13:07:25 2004
@@ -22,7 +22,7 @@
*/
-/* $Id: array.c,v 1.199.2.32 2004/04/01 19:07:01 iliaa Exp $ */
+/* $Id: array.c,v 1.199.2.33 2004/07/08 17:07:25 iliaa Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -543,6 +543,14 @@
}
}
+/* check is comparison function is valid */
+#define PHP_ARRAY_CMP_FUNC_CHECK(func_name) \
+ if (!zend_is_callable(*func_name, 0, NULL)) { \
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid comparison
function."); \
+ BG(user_compare_func_name) = old_compare_func; \
+ RETURN_FALSE; \
+ } \
+
/* {{{ proto bool usort(array array_arg, string cmp_function)
Sort an array by values using a user-defined comparison function */
PHP_FUNCTION(usort)
@@ -562,6 +570,9 @@
BG(user_compare_func_name) = old_compare_func;
RETURN_FALSE;
}
+
+ PHP_ARRAY_CMP_FUNC_CHECK(BG(user_compare_func_name))
+
if (zend_hash_sort(target_hash, zend_qsort, array_user_compare, 1 TSRMLS_CC)
== FAILURE) {
BG(user_compare_func_name) = old_compare_func;
RETURN_FALSE;
@@ -590,6 +601,9 @@
BG(user_compare_func_name) = old_compare_func;
RETURN_FALSE;
}
+
+ PHP_ARRAY_CMP_FUNC_CHECK(BG(user_compare_func_name))
+
if (zend_hash_sort(target_hash, zend_qsort, array_user_compare, 0 TSRMLS_CC)
== FAILURE) {
BG(user_compare_func_name) = old_compare_func;
RETURN_FALSE;
@@ -665,6 +679,9 @@
BG(user_compare_func_name) = old_compare_func;
RETURN_FALSE;
}
+
+ PHP_ARRAY_CMP_FUNC_CHECK(BG(user_compare_func_name))
+
if (zend_hash_sort(target_hash, zend_qsort, array_user_key_compare, 0
TSRMLS_CC) == FAILURE) {
BG(user_compare_func_name) = old_compare_func;
RETURN_FALSE;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php