From b871ebd8dc58c07c1c98c1a4213576f6b8682868 Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Mon, 15 Sep 2003 23:49:32 +0000 Subject: [PATCH] Fixed bug #25106 (Added more stringent checks on bzopen() mode). In some cases bz2 may fail to open the file, but stream wrappers will still create an empty file, remove this file. Change virtual_filepath to virtual_filepath_ex, which allows BZ2_bzfopen() to work without having to resort to stream wrappers. --- ext/bz2/bz2.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/ext/bz2/bz2.c b/ext/bz2/bz2.c index 7618ef0cc9..9ed15ca7b5 100644 --- a/ext/bz2/bz2.c +++ b/ext/bz2/bz2.c @@ -165,9 +165,12 @@ PHP_BZ2_API php_stream *_php_stream_bz2open(php_stream_wrapper *wrapper, if (strncasecmp("compress.bzip2://", path, 17) == 0) { path += 17; } + if (mode[0] != 'w' && mode[0] != 'r' && mode[1] != '\0') { + return NULL; + } #ifdef VIRTUAL_DIR - virtual_filepath(path, &path_copy TSRMLS_CC); + virtual_filepath_ex(path, &path_copy, NULL TSRMLS_CC); #else path_copy = path; #endif @@ -190,6 +193,12 @@ PHP_BZ2_API php_stream *_php_stream_bz2open(php_stream_wrapper *wrapper, bz_file = BZ2_bzdopen(fd, mode); } } + /* remove the file created by php_stream_open_wrapper(), it is not needed since BZ2 functions + * failed. + */ + if (!bz_file && mode[0] == 'w') { + VCWD_UNLINK(*opened_path); + } } if (bz_file) { @@ -303,7 +312,12 @@ PHP_FUNCTION(bzopen) WRONG_PARAM_COUNT; } convert_to_string_ex(mode); - + + if (Z_STRVAL_PP(mode)[0] != 'r' && Z_STRVAL_PP(mode)[0] != 'w' && Z_STRVAL_PP(mode)[1] != '\0') { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "'%s' is not a valid mode for bzopen(). Only 'w' and 'r' are supported.", Z_STRVAL_PP(mode)); + RETURN_FALSE; + } + /* If it's not a resource its a string containing the filename to open */ if (Z_TYPE_PP(file) != IS_RESOURCE) { convert_to_string_ex(file); -- 2.40.0