]> granicus.if.org Git - php/commitdiff
- New parameter parsing API (to preg_replace*)
authorFelipe Pena <felipe@php.net>
Mon, 30 Jun 2008 17:14:48 +0000 (17:14 +0000)
committerFelipe Pena <felipe@php.net>
Mon, 30 Jun 2008 17:14:48 +0000 (17:14 +0000)
- Fixed related tests

ext/pcre/php_pcre.c
ext/pcre/tests/preg_replace_callback3.phpt
ext/pcre/tests/preg_replace_callback_error.phpt
ext/pcre/tests/preg_replace_error.phpt

index 6f47827ef7ebcc89e307bbc09b0a0008d07f5593..af67b284d10b4b8c0a241855f7df59f2537f49a9 100644 (file)
@@ -1289,12 +1289,12 @@ static void preg_replace_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_callabl
        zval               **regex,
                                   **replace,
                                   **subject,
-                                  **limit,
                                   **subject_entry,
                                   **zcount;
        char                    *result;
        int                              result_len;
        int                              limit_val = -1;
+       long                    limit;
        char                    *string_key;
        ulong                    num_key;
        char                    *callback_name;
@@ -1302,10 +1302,10 @@ static void preg_replace_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_callabl
        int                             *replace_count_ptr=NULL; 
        
        /* Get function parameters and do error-checking. */
-       if (ZEND_NUM_ARGS() < 3 || ZEND_NUM_ARGS() > 5 ||
-               zend_get_parameters_ex(ZEND_NUM_ARGS(), &regex, &replace, &subject, &limit, &zcount) == FAILURE) {
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZZ|lZ", &regex, &replace, &subject, &limit, &zcount) == FAILURE) {
+               return;
        }
+       
        if (!is_callable_replace && Z_TYPE_PP(replace) == IS_ARRAY && Z_TYPE_PP(regex) != IS_ARRAY) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter mismatch, pattern is a string while replacement is an array");
                RETURN_FALSE;
@@ -1330,8 +1330,7 @@ static void preg_replace_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_callabl
        SEPARATE_ZVAL(subject);
 
        if (ZEND_NUM_ARGS() > 3) {
-               convert_to_long_ex(limit);
-               limit_val = Z_LVAL_PP(limit);
+               limit_val = limit;
        }
        if (ZEND_NUM_ARGS() > 4) {
                replace_count_ptr =& replace_count;
index fafd966f47ffdfc1d11d9cc6e3fc8c3a965cb13c..30799e21f939a43740d582b669bd8b1bc97b2a8a 100644 (file)
@@ -18,13 +18,13 @@ var_dump(preg_replace_callback($a,$a,$a,$a,$a));
 echo "Done\n";
 ?>
 --EXPECTF--    
-Warning: Wrong parameter count for preg_replace_callback() in %s on line %d
+Warning: preg_replace_callback() expects at least 3 parameters, 0 given in %s on line %d
 NULL
 
-Warning: Wrong parameter count for preg_replace_callback() in %s on line %d
+Warning: preg_replace_callback() expects at least 3 parameters, 1 given in %s on line %d
 NULL
 
-Warning: Wrong parameter count for preg_replace_callback() in %s on line %d
+Warning: preg_replace_callback() expects at least 3 parameters, 2 given in %s on line %d
 NULL
 
 Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d
@@ -36,10 +36,9 @@ int(3)
 Warning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d
 int(3)
 
-Warning: preg_replace_callback(): Requires argument 2, '', to be a valid callback in %s on line 1%d
-string(0) ""
+Warning: preg_replace_callback() expects parameter 4 to be long, string given in %s on line %d
+NULL
 
-Warning: preg_replace_callback(): Requires argument 2, 'Array', to be a valid callback in %s on line %d
-array(0) {
-}
+Warning: preg_replace_callback() expects parameter 4 to be long, array given in %s on line %d
+NULL
 Done
index 8d96446d4b0ba18dc606c8a9ff97d2fdac3803e7..9371fcf1bf26296b2fc39a7b2e445b8db4dc298b 100644 (file)
@@ -33,16 +33,16 @@ echo "Done";
 
 -- Testing preg_replace_callback() function with Zero arguments --
 
-Warning: Wrong parameter count for preg_replace_callback() in %spreg_replace_callback_error.php on line %d
+Warning: preg_replace_callback() expects at least 3 parameters, 0 given in %s on line %d
 NULL
 
 -- Testing preg_replace_callback() function with more than expected no. of arguments --
 
-Warning: Wrong parameter count for preg_replace_callback() in %spreg_replace_callback_error.php on line %d
+Warning: preg_replace_callback() expects at most 5 parameters, 6 given in %s on line %d
 NULL
 
 -- Testing preg_replace_callback() function with less than expected no. of arguments --
 
-Warning: Wrong parameter count for preg_replace_callback() in %spreg_replace_callback_error.php on line %d
+Warning: preg_replace_callback() expects at least 3 parameters, 2 given in %s on line %d
 NULL
 Done
index c91f500f726ce03703425a02784d88c16cb984af..fc3427d1c820975eba921d030bf2caf140e2b893 100644 (file)
@@ -30,16 +30,16 @@ echo "Done"
 
 -- Testing preg_replace() function with zero arguments --
 
-Warning: Wrong parameter count for preg_replace() in %spreg_replace_error.php on line %d
+Warning: preg_replace() expects at least 3 parameters, 0 given in %s on line %d
 NULL
 
 -- Testing preg_replace() function with more than expected no. of arguments --
 
-Warning: Wrong parameter count for preg_replace() in %spreg_replace_error.php on line %d
+Warning: preg_replace() expects at most 5 parameters, 6 given in %s on line %d
 NULL
 
 -- Testing preg_replace() function with less than expected no. of arguments --
 
-Warning: Wrong parameter count for preg_replace() in %spreg_replace_error.php on line %d
+Warning: preg_replace() expects at least 3 parameters, 2 given in %s on line %d
 NULL
 Done