Browse Source

Added missing sanity check in fgetcsv()

migration/unlabaled-1.3.2
Moriyoshi Koizumi 24 years ago
parent
commit
f4c9feb774
  1. 42
      ext/standard/file.c

42
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);

Loading…
Cancel
Save