Browse Source

Allow null as a default value for length in mb_substr() and mb_strcut()

pull/184/head
Lars Strojny 14 years ago
parent
commit
133f610bb1
  1. 4
      NEWS
  2. 16
      ext/mbstring/mbstring.c
  3. 2
      ext/mbstring/tests/mb_str_functions_opt-parameter.phpt

4
NEWS

@ -14,6 +14,10 @@ PHP NEWS
. Bug #62987 (Assigning to ArrayObject[null][something] overrides all . Bug #62987 (Assigning to ArrayObject[null][something] overrides all
undefined variables). (Laruence) undefined variables). (Laruence)
- mbstring:
. Allow passing null as a default value to mb_substr() and mb_strcut(). Patch
by Alexander Moskaliov via GitHub PR #133. (Lars)
?? ??? 2012, PHP 5.4.7 ?? ??? 2012, PHP 5.4.7
- Core: - Core:

16
ext/mbstring/mbstring.c

@ -2715,9 +2715,10 @@ PHP_FUNCTION(mb_substr)
char *str, *encoding; char *str, *encoding;
long from, len; long from, len;
int mblen, str_len, encoding_len; int mblen, str_len, encoding_len;
zval **z_len = NULL;
mbfl_string string, result, *ret; mbfl_string string, result, *ret;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|ls", &str, &str_len, &from, &len, &encoding, &encoding_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|Zs", &str, &str_len, &from, &z_len, &encoding, &encoding_len) == FAILURE) {
return; return;
} }
@ -2736,8 +2737,11 @@ PHP_FUNCTION(mb_substr)
string.val = (unsigned char *)str; string.val = (unsigned char *)str;
string.len = str_len; string.len = str_len;
if (argc < 3) {
if (argc < 3 || Z_TYPE_PP(z_len) == IS_NULL) {
len = str_len; len = str_len;
} else {
convert_to_long_ex(z_len);
len = Z_LVAL_PP(z_len);
} }
/* measures length */ /* measures length */
@ -2788,13 +2792,14 @@ PHP_FUNCTION(mb_strcut)
char *encoding; char *encoding;
long from, len; long from, len;
int encoding_len; int encoding_len;
zval **z_len = NULL;
mbfl_string string, result, *ret; mbfl_string string, result, *ret;
mbfl_string_init(&string); mbfl_string_init(&string);
string.no_language = MBSTRG(language); string.no_language = MBSTRG(language);
string.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; string.no_encoding = MBSTRG(current_internal_encoding)->no_encoding;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|ls", (char **)&string.val, (int **)&string.len, &from, &len, &encoding, &encoding_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|Zs", (char **)&string.val, (int **)&string.len, &from, &z_len, &encoding, &encoding_len) == FAILURE) {
return; return;
} }
@ -2806,8 +2811,11 @@ PHP_FUNCTION(mb_strcut)
} }
} }
if (argc < 3) {
if (argc < 3 || Z_TYPE_PP(z_len) == IS_NULL) {
len = string.len; len = string.len;
} else {
convert_to_long_ex(z_len);
len = Z_LVAL_PP(z_len);
} }
/* if "from" position is negative, count start position from the end /* if "from" position is negative, count start position from the end

2
ext/mbstring/tests/mb_str_functions_opt-parameter.phpt

@ -28,5 +28,3 @@ baz
baz baz
foo foo
==DONE== ==DONE==
--XFAIL--
mb functions fail to allow null instead of actual value
Loading…
Cancel
Save