]> granicus.if.org Git - php/commitdiff
fix bug 55562 - make substr always return rest of the string if length is too long
authorStanislav Malyshev <stas@php.net>
Sun, 4 Sep 2011 18:50:05 +0000 (18:50 +0000)
committerStanislav Malyshev <stas@php.net>
Sun, 4 Sep 2011 18:50:05 +0000 (18:50 +0000)
ext/intl/grapheme/grapheme_string.c
ext/intl/tests/bug55562.phpt [new file with mode: 0644]

index 719015fe64be77e8a3a3a9fe85a8758db305eca2..692e2f80b0d63c45c0432255e2ff761263cd9805 100755 (executable)
@@ -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 (file)
index 0000000..dd053c0
--- /dev/null
@@ -0,0 +1,13 @@
+--TEST--
+grapheme_substr() - Bug55562 - grapheme_substr() returns false if length parameter is to large
+--SKIPIF--
+<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
+--FILE--
+<?php
+var_dump(
+  grapheme_substr('FOK', 1, 20), // expected: OK
+  grapheme_substr('한국어', 1, 20) //expected: 국어
+);
+--EXPECT--
+string(2) "OK"
+string(6) "국어"