From: Dmitry Stogov Date: Mon, 19 Nov 2007 15:55:48 +0000 (+0000) Subject: fixed SIGSEGV in chgrp() X-Git-Tag: RELEASE_2_0_0a1~1343 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ab34cdc7063f3ed8a5eee0bd6d1420c0d7f4410e;p=php fixed SIGSEGV in chgrp() --- diff --git a/ext/standard/filestat.c b/ext/standard/filestat.c index 8836b0e5d7..7797705ed7 100644 --- a/ext/standard/filestat.c +++ b/ext/standard/filestat.c @@ -428,12 +428,16 @@ static void php_do_chgrp(INTERNAL_FUNCTION_PARAMETERS, int do_lchgrp) /* {{{ */ int ret; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "tz/", &filename, &filename_len, &filename_type, &group) == FAILURE) { - return; + RETURN_FALSE; } if (Z_TYPE_P(group) == IS_LONG) { gid = (gid_t)Z_LVAL_P(group); - } else { + } else if (Z_TYPE_P(group) == IS_STRING || + Z_TYPE_P(group) == IS_UNICODE) { + if (Z_TYPE_P(group) == IS_UNICODE) { + zval_unicode_to_string(group TSRMLS_CC); + } #if defined(ZTS) && defined(HAVE_GETGRNAM_R) && defined(_SC_GETGR_R_SIZE_MAX) struct group gr; struct group *retgrptr; @@ -461,6 +465,9 @@ static void php_do_chgrp(INTERNAL_FUNCTION_PARAMETERS, int do_lchgrp) /* {{{ */ } gid = gr->gr_gid; #endif + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "parameter 2 should be string or integer, %s given",zend_zval_type_name(group)); + RETURN_FALSE; } if (filename_type == IS_UNICODE) { diff --git a/ext/standard/tests/file/chgrp.phpt b/ext/standard/tests/file/chgrp.phpt index d0ebce36a6..4eaa908b52 100644 --- a/ext/standard/tests/file/chgrp.phpt +++ b/ext/standard/tests/file/chgrp.phpt @@ -5,5 +5,6 @@ chgrp() with NULL as group name chgrp("sjhgfskhagkfdgskjfhgskfsdgfkdsajf", NULL); echo "ALIVE\n"; ?> ---EXPECT-- +--EXPECTF-- +Warning: chgrp(): parameter 2 should be string or integer, null given in %schgrp.php on line 2 ALIVE