From 40217d04174c9cdc9ce2d2638ab1185ffd0f169d Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Sun, 4 Sep 2011 18:50:05 +0000 Subject: [PATCH] fix bug 55562 - make substr always return rest of the string if length is too long --- ext/intl/grapheme/grapheme_string.c | 14 +++++++++----- ext/intl/tests/bug55562.phpt | 13 +++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 ext/intl/tests/bug55562.phpt diff --git a/ext/intl/grapheme/grapheme_string.c b/ext/intl/grapheme/grapheme_string.c index 719015fe64..692e2f80b0 100755 --- a/ext/intl/grapheme/grapheme_string.c +++ b/ext/intl/grapheme/grapheme_string.c @@ -554,13 +554,17 @@ PHP_FUNCTION(grapheme_substr) length += iter_val; } - if ( UBRK_DONE == sub_str_end_pos && length < 0) { + if ( UBRK_DONE == sub_str_end_pos) { + if(length < 0) { - intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_substr: length not contained in string", 1 TSRMLS_CC ); + intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_substr: length not contained in string", 1 TSRMLS_CC ); - efree(ustr); - ubrk_close(bi); - RETURN_FALSE; + efree(ustr); + ubrk_close(bi); + RETURN_FALSE; + } else { + sub_str_end_pos = ustr_len; + } } sub_str = NULL; diff --git a/ext/intl/tests/bug55562.phpt b/ext/intl/tests/bug55562.phpt new file mode 100644 index 0000000000..dd053c0ee9 --- /dev/null +++ b/ext/intl/tests/bug55562.phpt @@ -0,0 +1,13 @@ +--TEST-- +grapheme_substr() - Bug55562 - grapheme_substr() returns false if length parameter is to large +--SKIPIF-- + +--FILE-- +