Skip to content

Commit c28cac4

Browse files
committed
Fix bad args to grapheme_extract(), reported by Maksymilian Arciemowicz
1 parent e1dee99 commit c28cac4

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

ext/intl/grapheme/grapheme_string.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,7 @@ PHP_FUNCTION(grapheme_extract)
799799

800800
if ( NULL != next ) {
801801
if ( !PZVAL_IS_REF(next) ) {
802-
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
802+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
803803
"grapheme_extract: 'next' was not passed by reference", 0 TSRMLS_CC );
804804

805805
RETURN_FALSE;
@@ -819,11 +819,17 @@ PHP_FUNCTION(grapheme_extract)
819819
}
820820

821821
if ( lstart > INT32_MAX || lstart < 0 || lstart >= str_len ) {
822+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_extract: start not contained in string", 0 TSRMLS_CC );
823+
RETURN_FALSE;
824+
}
822825

823-
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_extract: start not contained in string", 1 TSRMLS_CC );
824-
826+
if ( size > INT32_MAX || size < 0) {
827+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_extract: size is invalid", 0 TSRMLS_CC );
825828
RETURN_FALSE;
826829
}
830+
if (size == 0) {
831+
RETURN_EMPTY_STRING();
832+
}
827833

828834
/* we checked that it will fit: */
829835
start = (int32_t) lstart;

0 commit comments

Comments
 (0)