From ac73c9d8b41a6d862b2719109d33e551b7a9b83d Mon Sep 17 00:00:00 2001 From: Kalle Sommer Nielsen Date: Mon, 16 Aug 2010 21:56:35 +0000 Subject: [PATCH] Fixed the context parameter on copy() to actually have an effect # After looking at the logs, Jani did a bad merge into 5.3, so that # the context parameter sent to copy() actually isn't used at all. This # relatively simple patch fixes that for trunk. # # See FR #42965 # internals: # This changes the php_copy_*() decls to contain an additional parameter for stream contexts --- ext/standard/basic_functions.c | 3 ++- ext/standard/file.c | 14 +++++++------- ext/standard/file.h | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 8d9f5e1b4f..f7baa75c59 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -1206,6 +1206,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_copy, 0) ZEND_ARG_INFO(0, source_file) ZEND_ARG_INFO(0, destination_file) + ZEND_ARG_INFO(0, context) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_fread, 0) @@ -5715,7 +5716,7 @@ PHP_FUNCTION(move_uploaded_file) php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno)); } #endif - } else if (php_copy_file_ex(path, new_path, STREAM_DISABLE_OPEN_BASEDIR TSRMLS_CC) == SUCCESS) { + } else if (php_copy_file_ex(path, new_path, STREAM_DISABLE_OPEN_BASEDIR, NULL TSRMLS_CC) == SUCCESS) { VCWD_UNLINK(path); successful = 1; } diff --git a/ext/standard/file.c b/ext/standard/file.c index 420c7b8073..fe0c27854d 100644 --- a/ext/standard/file.c +++ b/ext/standard/file.c @@ -1646,7 +1646,7 @@ PHP_FUNCTION(copy) context = php_stream_context_from_zval(zcontext, 0); - if (php_copy_file(source, target TSRMLS_CC) == SUCCESS) { + if (php_copy_file_ex(source, target, 0, context TSRMLS_CC) == SUCCESS) { RETURN_TRUE; } else { RETURN_FALSE; @@ -1656,19 +1656,19 @@ PHP_FUNCTION(copy) PHPAPI int php_copy_file(char *src, char *dest TSRMLS_DC) /* {{{ */ { - return php_copy_file_ex(src, dest, 0 TSRMLS_CC); + return php_copy_file_ex(src, dest, 0, NULL TSRMLS_CC); } /* }}} */ /* {{{ php_copy_file */ -PHPAPI int php_copy_file_ex(char *src, char *dest, int src_flg TSRMLS_DC) +PHPAPI int php_copy_file_ex(char *src, char *dest, int src_flg, php_stream_context *ctx TSRMLS_DC) { php_stream *srcstream = NULL, *deststream = NULL; int ret = FAILURE; php_stream_statbuf src_s, dest_s; - switch (php_stream_stat_path_ex(src, 0, &src_s, NULL)) { + switch (php_stream_stat_path_ex(src, 0, &src_s, ctx)) { case -1: /* non-statable stream */ goto safe_to_copy; @@ -1683,7 +1683,7 @@ PHPAPI int php_copy_file_ex(char *src, char *dest, int src_flg TSRMLS_DC) return FAILURE; } - switch (php_stream_stat_path_ex(dest, PHP_STREAM_URL_STAT_QUIET, &dest_s, NULL)) { + switch (php_stream_stat_path_ex(dest, PHP_STREAM_URL_STAT_QUIET, &dest_s, ctx)) { case -1: /* non-statable stream */ goto safe_to_copy; @@ -1733,13 +1733,13 @@ no_stat: } safe_to_copy: - srcstream = php_stream_open_wrapper(src, "rb", src_flg | REPORT_ERRORS, NULL); + srcstream = php_stream_open_wrapper_ex(src, "rb", src_flg | REPORT_ERRORS, NULL, ctx); if (!srcstream) { return ret; } - deststream = php_stream_open_wrapper(dest, "wb", REPORT_ERRORS, NULL); + deststream = php_stream_open_wrapper_ex(dest, "wb", REPORT_ERRORS, NULL, ctx); if (srcstream && deststream) { ret = php_stream_copy_to_stream_ex(srcstream, deststream, PHP_STREAM_COPY_ALL, NULL); diff --git a/ext/standard/file.h b/ext/standard/file.h index e47d3da20d..37acc99508 100644 --- a/ext/standard/file.h +++ b/ext/standard/file.h @@ -75,7 +75,7 @@ PHP_MINIT_FUNCTION(user_streams); PHPAPI int php_le_stream_context(void); PHPAPI int php_set_sock_blocking(int socketd, int block TSRMLS_DC); PHPAPI int php_copy_file(char *src, char *dest TSRMLS_DC); -PHPAPI int php_copy_file_ex(char *src, char *dest, int src_chk TSRMLS_DC); +PHPAPI int php_copy_file_ex(char *src, char *dest, int src_chk, php_stream_context *ctx TSRMLS_DC); PHPAPI int php_mkdir_ex(char *dir, long mode, int options TSRMLS_DC); PHPAPI int php_mkdir(char *dir, long mode TSRMLS_DC); PHPAPI void php_fgetcsv(php_stream *stream, char delimiter, char enclosure, char escape_char, size_t buf_len, char *buf, zval *return_value TSRMLS_DC); -- 2.40.0