]> granicus.if.org Git - php/commitdiff
Move encoding fetching outside php_mb_stripos()
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 30 Mar 2020 10:29:11 +0000 (12:29 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 30 Mar 2020 10:29:11 +0000 (12:29 +0200)
ext/mbstring/mbstring.c
ext/mbstring/mbstring.h

index c2716eae26537e71ce93b7d4dfeaf9229fc210ad..9a3f2c225d75adb658ab0519ff4cc932390aacad 100644 (file)
@@ -2162,12 +2162,18 @@ PHP_FUNCTION(mb_stripos)
        zend_long offset = 0;
        mbfl_string haystack, needle;
        zend_string *from_encoding = NULL;
+       const mbfl_encoding *enc;
 
        if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|lS", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &from_encoding) == FAILURE) {
                RETURN_THROWS();
        }
 
-       n = php_mb_stripos(0, (char *)haystack.val, haystack.len, (char *)needle.val, needle.len, offset, from_encoding);
+       enc = php_mb_get_encoding(from_encoding);
+       if (!enc) {
+               RETURN_FALSE;
+       }
+
+       n = php_mb_stripos(0, (char *)haystack.val, haystack.len, (char *)needle.val, needle.len, offset, enc);
 
        if (!mbfl_is_error(n)) {
                RETVAL_LONG(n);
@@ -2186,12 +2192,18 @@ PHP_FUNCTION(mb_strripos)
        zend_long offset = 0;
        mbfl_string haystack, needle;
        zend_string *from_encoding = NULL;
+       const mbfl_encoding *enc;
 
        if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|lS", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &from_encoding) == FAILURE) {
                RETURN_THROWS();
        }
 
-       n = php_mb_stripos(1, (char *)haystack.val, haystack.len, (char *)needle.val, needle.len, offset, from_encoding);
+       enc = php_mb_get_encoding(from_encoding);
+       if (!enc) {
+               RETURN_FALSE;
+       }
+
+       n = php_mb_stripos(1, (char *)haystack.val, haystack.len, (char *)needle.val, needle.len, offset, enc);
 
        if (!mbfl_is_error(n)) {
                RETVAL_LONG(n);
@@ -2313,7 +2325,7 @@ PHP_FUNCTION(mb_stristr)
                RETURN_FALSE;
        }
 
-       n = php_mb_stripos(0, (char *)haystack.val, haystack.len, (char *)needle.val, needle.len, 0, from_encoding);
+       n = php_mb_stripos(0, (char *)haystack.val, haystack.len, (char *)needle.val, needle.len, 0, needle.encoding);
        if (mbfl_is_error(n)) {
                RETURN_FALSE;
        }
@@ -2359,7 +2371,7 @@ PHP_FUNCTION(mb_strrichr)
                RETURN_FALSE;
        }
 
-       n = php_mb_stripos(1, (char *)haystack.val, haystack.len, (char *)needle.val, needle.len, 0, from_encoding);
+       n = php_mb_stripos(1, (char *)haystack.val, haystack.len, (char *)needle.val, needle.len, 0, needle.encoding);
        if (mbfl_is_error(n)) {
                RETURN_FALSE;
        }
@@ -4761,16 +4773,10 @@ MBSTRING_API char *php_mb_safe_strrchr(const char *s, unsigned int c, size_t nby
 
 /* {{{ MBSTRING_API int php_mb_stripos()
  */
-MBSTRING_API size_t php_mb_stripos(int mode, const char *old_haystack, size_t old_haystack_len, const char *old_needle, size_t old_needle_len, zend_long offset, zend_string *from_encoding)
+MBSTRING_API size_t php_mb_stripos(int mode, const char *old_haystack, size_t old_haystack_len, const char *old_needle, size_t old_needle_len, zend_long offset, const mbfl_encoding *enc)
 {
        size_t n = (size_t) -1;
        mbfl_string haystack, needle;
-       const mbfl_encoding *enc;
-
-       enc = php_mb_get_encoding(from_encoding);
-       if (!enc) {
-               return (size_t) -1;
-       }
 
        mbfl_string_init(&haystack);
        mbfl_string_init(&needle);
index 48a33023fc68411d59f2c4459319280e77261b03..8ff3cbbed459b0cf0868fd0bc53e39f7e01b209f 100644 (file)
@@ -125,7 +125,7 @@ MBSTRING_API char * php_mb_convert_encoding(const char *input, size_t length,
 MBSTRING_API size_t php_mb_mbchar_bytes_ex(const char *s, const mbfl_encoding *enc);
 MBSTRING_API size_t php_mb_mbchar_bytes(const char *s);
 
-MBSTRING_API size_t php_mb_stripos(int mode, const char *old_haystack, size_t old_haystack_len, const char *old_needle, size_t old_needle_len, zend_long offset, zend_string *from_encoding);
+MBSTRING_API size_t php_mb_stripos(int mode, const char *old_haystack, size_t old_haystack_len, const char *old_needle, size_t old_needle_len, zend_long offset, const mbfl_encoding *encoding);
 MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const char *enc);
 
 ZEND_BEGIN_MODULE_GLOBALS(mbstring)