diff options
| -rw-r--r-- | ext/intl/grapheme/grapheme_util.h | 2 | ||||
| -rw-r--r-- | ext/intl/tests/grapheme2.phpt | 2 | ||||
| -rw-r--r-- | ext/intl/tests/grapheme_out_of_bounds.phpt | 95 |
3 files changed, 97 insertions, 2 deletions
diff --git a/ext/intl/grapheme/grapheme_util.h b/ext/intl/grapheme/grapheme_util.h index 508b7355f0..6aeeed2bd7 100644 --- a/ext/intl/grapheme/grapheme_util.h +++ b/ext/intl/grapheme/grapheme_util.h @@ -37,6 +37,6 @@ int32_t grapheme_get_haystack_offset(UBreakIterator* bi, int32_t offset); UBreakIterator* grapheme_get_break_iterator(void *stack_buffer, UErrorCode *status ); /* OUTSIDE_STRING: check if (possibly negative) long offset is outside the string with int32_t length */ -#define OUTSIDE_STRING(offset, max_len) ( offset <= INT32_MIN || offset > INT32_MAX || (offset < 0 ? -offset > (zend_long) max_len : offset >= (zend_long) max_len) ) +#define OUTSIDE_STRING(offset, max_len) ( offset <= INT32_MIN || offset > INT32_MAX || (offset < 0 ? -offset > (zend_long) max_len : offset > (zend_long) max_len) ) #endif // GRAPHEME_GRAPHEME_UTIL_H diff --git a/ext/intl/tests/grapheme2.phpt b/ext/intl/tests/grapheme2.phpt index 90af00732f..1335fcb04d 100644 --- a/ext/intl/tests/grapheme2.phpt +++ b/ext/intl/tests/grapheme2.phpt @@ -961,7 +961,7 @@ find "a%CC%8ABca%CC%8A" in "o%CC%88a%CC%8AaA%CC%8AbCa%CC%8Adef" - grapheme_strri function grapheme_substr($string, $start, $length = -1) {} -substring of "abc" from "3" - grapheme_substr: grapheme_substr(): Argument #2 ($start) must be contained in argument #1 ($string) +substring of "abc" from "3" - grapheme_substr = false == false substring of "aa%CC%8Abco%CC%88" from "5" - grapheme_substr = false == false substring of "aoa%CC%8Abco%CC%88O" from "2" - grapheme_substr = a%CC%8Abco%CC%88O == a%CC%8Abco%CC%88O substring of "o%CC%88a%CC%8AaA%CC%8Abc" from "2" - grapheme_substr = aA%CC%8Abc == aA%CC%8Abc diff --git a/ext/intl/tests/grapheme_out_of_bounds.phpt b/ext/intl/tests/grapheme_out_of_bounds.phpt new file mode 100644 index 0000000000..ab7a575e21 --- /dev/null +++ b/ext/intl/tests/grapheme_out_of_bounds.phpt @@ -0,0 +1,95 @@ +--TEST-- +grapheme_* functions with out-of-bounds offsets +--FILE-- +<?php + +// Offset == Length is legal. +var_dump(grapheme_strpos("foo", "bar", 3)); +var_dump(grapheme_stripos("foo", "bar", 3)); +var_dump(grapheme_strrpos("foo", "bar", 3)); +var_dump(grapheme_strripos("foo", "bar", 3)); +echo "\n"; + +// Offset == -Length is legal. +var_dump(grapheme_strpos("foo", "bar", -3)); +var_dump(grapheme_stripos("foo", "bar", -3)); +var_dump(grapheme_strrpos("foo", "bar", -3)); +var_dump(grapheme_strripos("foo", "bar", -3)); +echo "\n"; + +// Positive out of bounds. +try { + var_dump(grapheme_strpos("foo", "bar", 4)); +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump(grapheme_stripos("foo", "bar", 4)); +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump(grapheme_strrpos("foo", "bar", 4)); +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump(grapheme_strripos("foo", "bar", 4)); +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} +echo "\n"; + +// Negative out of bounds. +try { + var_dump(grapheme_strpos("foo", "bar", -4)); +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump(grapheme_stripos("foo", "bar", -4)); +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump(grapheme_strrpos("foo", "bar", -4)); +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump(grapheme_strripos("foo", "bar", -4)); +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} +echo "\n"; + +// TODO: substr is special. +var_dump(grapheme_substr("foo", 3)); +var_dump(grapheme_substr("foo", -3)); +//var_dump(grapheme_substr("foo", 4)); +//var_dump(grapheme_substr("foo", -4)); + +?> +--EXPECT-- +bool(false) +bool(false) +bool(false) +bool(false) + +bool(false) +bool(false) +bool(false) +bool(false) + +grapheme_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack) +grapheme_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack) +grapheme_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack) +grapheme_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack) + +grapheme_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack) +grapheme_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack) +grapheme_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack) +grapheme_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack) + +bool(false) +string(3) "foo" |
