aharvey                                  Fri, 05 Nov 2010 04:37:27 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=305097

Log:
Implemented FR #53238 (Make third parameter of preg_match_all optional).

Bug: http://bugs.php.net/53238 (Assigned) Make third parameter of 
preg_match_all optional
      
Changed paths:
    U   php/php-src/trunk/NEWS
    U   php/php-src/trunk/UPGRADING
    U   php/php-src/trunk/ext/pcre/php_pcre.c
    U   php/php-src/trunk/ext/pcre/tests/002.phpt
    U   php/php-src/trunk/ext/pcre/tests/preg_match_all_basic.phpt
    U   php/php-src/trunk/ext/pcre/tests/preg_match_all_error.phpt

Modified: php/php-src/trunk/NEWS
===================================================================
--- php/php-src/trunk/NEWS      2010-11-05 01:56:28 UTC (rev 305096)
+++ php/php-src/trunk/NEWS      2010-11-05 04:37:27 UTC (rev 305097)
@@ -121,6 +121,8 @@

 - Deprecated mysql_list_dbs() (Request #50667). (Andrey)

+- Implemented FR #53238 (Make third parameter of preg_match_all optional).
+  (Adam)
 - Implemented FR #52555 (Ability to get HTTP response code). (Paul Dragoonis)
 - Implemented FR #51295 (SQLite3::busyTimeout not existing). (Mark)
 - Implemented FR #49366 (Make slash escaping optional in json_encode()). (Adam)

Modified: php/php-src/trunk/UPGRADING
===================================================================
--- php/php-src/trunk/UPGRADING 2010-11-05 01:56:28 UTC (rev 305096)
+++ php/php-src/trunk/UPGRADING 2010-11-05 04:37:27 UTC (rev 305097)
@@ -133,6 +133,9 @@
   behavior follows the recommendations of Unicode Technical Report #36.
 - htmlspecialchars_decode/html_entity_decode now decode ' if the document
   type is ENT_XML1, ENT_XHTML, or ENT_HTML5.
+- The third parameter ($matches) to preg_match_all() is now optional. If
+  omitted, the function will simply return the number of times the pattern was
+  matched in the subject and will have no other side effects.


 ===================================

Modified: php/php-src/trunk/ext/pcre/php_pcre.c
===================================================================
--- php/php-src/trunk/ext/pcre/php_pcre.c       2010-11-05 01:56:28 UTC (rev 
305096)
+++ php/php-src/trunk/ext/pcre/php_pcre.c       2010-11-05 04:37:27 UTC (rev 
305097)
@@ -506,7 +506,7 @@
        long                      flags = 0;            /* Match control flags 
*/
        long                      start_offset = 0;     /* Where the new search 
starts */

-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, ((global) ? 
"ssz|ll" : "ss|zll"), &regex, &regex_len,
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|zll", &regex, 
&regex_len,
                                                          &subject, 
&subject_len, &subpats, &flags, &start_offset) == FAILURE) {
                RETURN_FALSE;
        }
@@ -608,7 +608,7 @@
        offsets = (int *)safe_emalloc(size_offsets, sizeof(int), 0);

        /* Allocate match sets array and initialize the values. */
-       if (global && subpats_order == PREG_PATTERN_ORDER) {
+       if (global && subpats && subpats_order == PREG_PATTERN_ORDER) {
                match_sets = (zval **)safe_emalloc(num_subpats, sizeof(zval *), 
0);
                for (i=0; i<num_subpats; i++) {
                        ALLOC_ZVAL(match_sets[i]);
@@ -649,7 +649,7 @@
                                }

                                if (global) {   /* global pattern matching */
-                                       if (subpats_order == 
PREG_PATTERN_ORDER) {
+                                       if (subpats && subpats_order == 
PREG_PATTERN_ORDER) {
                                                /* For each subpattern, insert 
it into the appropriate array. */
                                                for (i = 0; i < count; i++) {
                                                        if (offset_capture) {
@@ -739,7 +739,7 @@
        } while (global);

        /* Add the match sets to the output array and clean up */
-       if (global && subpats_order == PREG_PATTERN_ORDER) {
+       if (global && subpats && subpats_order == PREG_PATTERN_ORDER) {
                for (i = 0; i < num_subpats; i++) {
                        if (subpat_names[i]) {
                                zend_hash_update(Z_ARRVAL_P(subpats), 
subpat_names[i],
@@ -766,7 +766,7 @@
 }
 /* }}} */

-/* {{{ proto int preg_match_all(string pattern, string subject, array 
&subpatterns [, int flags [, int offset]])
+/* {{{ proto int preg_match_all(string pattern, string subject, [array 
&subpatterns [, int flags [, int offset]]])
    Perform a Perl-style global regular expression match */
 static PHP_FUNCTION(preg_match_all)
 {

Modified: php/php-src/trunk/ext/pcre/tests/002.phpt
===================================================================
--- php/php-src/trunk/ext/pcre/tests/002.phpt   2010-11-05 01:56:28 UTC (rev 
305096)
+++ php/php-src/trunk/ext/pcre/tests/002.phpt   2010-11-05 04:37:27 UTC (rev 
305097)
@@ -20,7 +20,7 @@
 Warning: preg_match() expects at least 2 parameters, 0 given in %s002.php on 
line 3
 bool(false)

-Warning: preg_match_all() expects at least 3 parameters, 0 given in %s002.php 
on line 4
+Warning: preg_match_all() expects at least 2 parameters, 0 given in %s002.php 
on line 4
 bool(false)

 Warning: preg_match_all(): Invalid flags specified in %s002.php on line 5

Modified: php/php-src/trunk/ext/pcre/tests/preg_match_all_basic.phpt
===================================================================
--- php/php-src/trunk/ext/pcre/tests/preg_match_all_basic.phpt  2010-11-05 
01:56:28 UTC (rev 305096)
+++ php/php-src/trunk/ext/pcre/tests/preg_match_all_basic.phpt  2010-11-05 
04:37:27 UTC (rev 305097)
@@ -3,7 +3,7 @@
 --FILE--
 <?php
 /*
-* proto int preg_match_all(string pattern, string subject, array subpatterns 
[, int flags [, int offset]])
+* proto int preg_match_all(string pattern, string subject, [array subpatterns 
[, int flags [, int offset]]])
 * Function is implemented in ext/pcre/php_pcre.c
 */
 $string = 'Hello, world! This is a test. This is another test. \[4]. 34534 
string.';
@@ -17,6 +17,12 @@
 var_dump($match4);
 var_dump(preg_match_all('/(This is a ){2}(.*)\stest/', $string, $match5)); 
//tries to find "This is aThis is a [...] test" (0 matches)
 var_dump($match5);
+
+// Test not passing in a subpatterns array.
+var_dump(preg_match_all('/test/', $string));
+var_dump(preg_match_all('/this isn\'t in the string/', $string));
+var_dump(preg_match_all('/world/', $string));
+var_dump(preg_match_all('/[0-9]/', $string));
 ?>
 --EXPECTF--
 int(1)
@@ -80,3 +86,7 @@
   array(0) {
   }
 }
+int(2)
+int(0)
+int(1)
+int(6)

Modified: php/php-src/trunk/ext/pcre/tests/preg_match_all_error.phpt
===================================================================
--- php/php-src/trunk/ext/pcre/tests/preg_match_all_error.phpt  2010-11-05 
01:56:28 UTC (rev 305096)
+++ php/php-src/trunk/ext/pcre/tests/preg_match_all_error.phpt  2010-11-05 
04:37:27 UTC (rev 305097)
@@ -21,8 +21,7 @@
 // Testing preg_match_all withone less than the expected number of arguments
 echo "\n-- Testing preg_match_all() function with less than expected no. of 
arguments --\n";
 $pattern = '/\w/';
-$subject = 'string_val';
-var_dump(preg_match_all($pattern, $subject));
+var_dump(preg_match_all($pattern));
 echo "Done"
 ?>
 --EXPECTF--
@@ -30,7 +29,7 @@

 -- Testing preg_match_all() function with Zero arguments --

-Warning: preg_match_all() expects at least 3 parameters, 0 given in 
%spreg_match_all_error.php on line %d
+Warning: preg_match_all() expects at least 2 parameters, 0 given in 
%spreg_match_all_error.php on line %d
 bool(false)

 -- Testing preg_match_all() function with more than expected no. of arguments 
--
@@ -40,6 +39,6 @@

 -- Testing preg_match_all() function with less than expected no. of arguments 
--

-Warning: preg_match_all() expects at least 3 parameters, 2 given in 
%spreg_match_all_error.php on line %d
+Warning: preg_match_all() expects at least 2 parameters, 1 given in 
%spreg_match_all_error.php on line %d
 bool(false)
 Done

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

Reply via email to