From: Moriyoshi Koizumi Date: Mon, 28 Apr 2003 15:04:56 +0000 (+0000) Subject: Added missing sanity check in fgetcsv() X-Git-Tag: SPL_ALPHA~41 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f4c9feb7742fe78e829b589a97cd6acbd2b1fcf3;p=php Added missing sanity check in fgetcsv() --- diff --git a/ext/standard/file.c b/ext/standard/file.c index 6c98e8aa29..0950dfccd8 100644 --- a/ext/standard/file.c +++ b/ext/standard/file.c @@ -1665,32 +1665,12 @@ PHP_FUNCTION(fgetcsv) if (zend_get_parameters_ex(3, &fd, &bytes, &p_delim) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_string_ex(p_delim); - /* Make sure that there is at least one character in string */ - if (Z_STRLEN_PP(p_delim) < 1) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Third parameter must be a character"); - return; - } - /* use first character from string */ - delimiter = Z_STRVAL_PP(p_delim)[0]; break; case 4: if (zend_get_parameters_ex(4, &fd, &bytes, &p_delim, &p_enclosure) == FAILURE) { WRONG_PARAM_COUNT; } - convert_to_string_ex(p_delim); - /* Make sure that there is at least one character in string */ - if (Z_STRLEN_PP(p_delim) < 1) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Third parameter must be a character"); - return; - } - /* use first character from string */ - delimiter = Z_STRVAL_PP(p_delim)[0]; - - convert_to_string_ex(p_enclosure); - /* use first character from string */ - enclosure = Z_STRVAL_PP(p_enclosure)[0]; break; default: @@ -1699,6 +1679,28 @@ PHP_FUNCTION(fgetcsv) break; } + if (ZEND_NUM_ARGS() >= 3) { + convert_to_string_ex(p_delim); + /* Make sure that there is at least one character in string */ + if (Z_STRLEN_PP(p_delim) < 1) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "delimiter must be a character"); + RETURN_FALSE; + } + /* use first character from string */ + delimiter = Z_STRVAL_PP(p_delim)[0]; + } + + if (ZEND_NUM_ARGS() >= 4) { + convert_to_string_ex(p_enclosure); + /* Make sure that there is at least one character in string */ + if (Z_STRLEN_PP(p_enclosure) < 1) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "enclosure must be a character"); + RETURN_FALSE; + } + /* use first character from string */ + enclosure = Z_STRVAL_PP(p_enclosure)[0]; + } + php_stream_from_zval(stream, fd); convert_to_long_ex(bytes);