masugata                Thu Dec 21 17:26:05 2006 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src/ext/mbstring       mbstring.c 
  Log:
  Fixed bug #39361, #39400 (mbstring function overloading problem).
  
http://cvs.php.net/viewvc.cgi/php-src/ext/mbstring/mbstring.c?r1=1.224.2.22.2.17&r2=1.224.2.22.2.18&diff_format=u
Index: php-src/ext/mbstring/mbstring.c
diff -u php-src/ext/mbstring/mbstring.c:1.224.2.22.2.17 
php-src/ext/mbstring/mbstring.c:1.224.2.22.2.18
--- php-src/ext/mbstring/mbstring.c:1.224.2.22.2.17     Fri Nov  3 19:55:50 2006
+++ php-src/ext/mbstring/mbstring.c     Thu Dec 21 17:26:05 2006
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mbstring.c,v 1.224.2.22.2.17 2006/11/03 19:55:50 iliaa Exp $ */
+/* $Id: mbstring.c,v 1.224.2.22.2.18 2006/12/21 17:26:05 masugata Exp $ */
 
 /*
  * PHP 4 Multibyte String module "mbstring"
@@ -1346,7 +1346,7 @@
                                        MBSTRG(current_filter_illegal_mode) = 
MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
                                        
MBSTRG(current_filter_illegal_substchar) = Z_LVAL_PP(arg1);
                                } else {
-                                       php_error_docref(NULL TSRMLS_CC, 
E_WARNING, "Unknown character.");                                        
+                                       php_error_docref(NULL TSRMLS_CC, 
E_WARNING, "Unknown character.");
                                        RETVAL_FALSE;                           
        
                                }
                        }
@@ -1605,11 +1605,11 @@
        }
 
        if (offset < 0 || (unsigned long)offset > haystack.len) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is out of 
range");
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not 
contained in string.");
                RETURN_FALSE;
        }
        if (needle.len == 0) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty needle");
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter.");
                RETURN_FALSE;
        }
 
@@ -1639,7 +1639,7 @@
 /* }}} */
 
 /* {{{ proto int mb_strrpos(string haystack, string needle [, int offset [, 
string encoding]])
-   Find the last occurrence of a character in a string within another */
+   Find position of last occurrence of a string within another */
 PHP_FUNCTION(mb_strrpos)
 {
        int n;
@@ -1712,11 +1712,9 @@
        }
 
        if (haystack.len <= 0) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty haystack");
                RETURN_FALSE;
        }
        if (needle.len <= 0) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Empty needle");
                RETURN_FALSE;
        }
        n = mbfl_strpos(&haystack, &needle, offset, 1);
@@ -1770,6 +1768,10 @@
                RETURN_FALSE;
        }
 
+       if(offset > old_haystack_len){
+               RETURN_FALSE;
+       }
+
  n = php_mb_stripos(1, old_haystack, old_haystack_len, old_needle, 
old_needle_len, offset, from_encoding TSRMLS_CC);
 
        if (n >= 0) {
@@ -1810,7 +1812,7 @@
        }
 
        if (needle.len <= 0) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Empty needle");
+               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Empty delimiter.");
                RETURN_FALSE;
        }
        n = mbfl_strpos(&haystack, &needle, 0, 0);
@@ -1868,11 +1870,9 @@
        }
 
        if (haystack.len <= 0) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty haystack");
                RETURN_FALSE;
        }
        if (needle.len <= 0) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Empty needle");
                RETURN_FALSE;
        }
        n = mbfl_strpos(&haystack, &needle, 0, 1);
@@ -1920,6 +1920,11 @@
                RETURN_FALSE;
        }
 
+       if(!needle.len){
+               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Empty delimiter.");
+               RETURN_FALSE;
+       }
+
        haystack.no_encoding = needle.no_encoding = 
mbfl_name2no_encoding(from_encoding);
        if (haystack.no_encoding == mbfl_no_encoding_invalid) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding 
\"%s\"", from_encoding);
@@ -2033,7 +2038,7 @@
        }
 
        if (needle.len <= 0) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Empty needle");
+               php_error_docref(NULL TSRMLS_CC, E_WARNING,"Empty substring.");
                RETURN_FALSE;
        }
 
@@ -4225,6 +4230,7 @@
                        str[i] = ret->val;
                        len[i] = ret->len;
                }
+               
                MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd);
                mbfl_buffer_converter_delete(convd);
        }
@@ -4334,7 +4340,6 @@
                }
 
                if (haystack.len <= 0) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty 
haystack");
                        break;
                }
 
@@ -4345,7 +4350,6 @@
                }
 
                if (needle.len <= 0) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty 
needle");
                        break;
                }
 
@@ -4356,7 +4360,7 @@
                }
 
                if (offset < 0 || (unsigned long)offset > haystack.len) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is 
out of range");
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not 
contained in string.");
                        break;
                }
 
@@ -4507,6 +4511,7 @@
                *to = ret->val;
                *to_length = ret->len;
        }
+
        MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd);
        mbfl_buffer_converter_delete(convd);
 

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

Reply via email to