]> granicus.if.org Git - php/commitdiff
Fix bad args to grapheme_extract(), reported by Maksymilian Arciemowicz
authorStanislav Malyshev <stas@php.net>
Sun, 19 Dec 2010 05:07:31 +0000 (05:07 +0000)
committerStanislav Malyshev <stas@php.net>
Sun, 19 Dec 2010 05:07:31 +0000 (05:07 +0000)
ext/intl/grapheme/grapheme_string.c

index ba883f34a84f2f0ead5d78ff11434e639fb88c77..6ad8769619df3d076f198bfd707edc595949a3b1 100755 (executable)
@@ -799,7 +799,7 @@ PHP_FUNCTION(grapheme_extract)
 
        if ( NULL != next ) {
                if ( !PZVAL_IS_REF(next) ) {
-                       intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
+                       intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, 
                                 "grapheme_extract: 'next' was not passed by reference", 0 TSRMLS_CC );
                         
                        RETURN_FALSE;
@@ -819,11 +819,17 @@ PHP_FUNCTION(grapheme_extract)
        }
 
        if ( lstart > INT32_MAX || lstart < 0 || lstart >= str_len ) {
+               intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_extract: start not contained in string", 0 TSRMLS_CC );
+               RETURN_FALSE;
+       }
 
-               intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_extract: start not contained in string", 1 TSRMLS_CC );
-
+       if ( size > INT32_MAX || size < 0) {
+               intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_extract: size is invalid", 0 TSRMLS_CC );
                RETURN_FALSE;
        }
+       if (size == 0) {
+               RETURN_EMPTY_STRING();
+       }
 
        /* we checked that it will fit: */
        start = (int32_t) lstart;