]> granicus.if.org Git - php/commitdiff
Fixed the context parameter on copy() to actually have an effect
authorKalle Sommer Nielsen <kalle@php.net>
Mon, 16 Aug 2010 21:56:35 +0000 (21:56 +0000)
committerKalle Sommer Nielsen <kalle@php.net>
Mon, 16 Aug 2010 21:56:35 +0000 (21:56 +0000)
# 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
ext/standard/file.c
ext/standard/file.h

index 8d9f5e1b4f842cb0d266094f1c9af3baff207974..f7baa75c59aa1e65f9d68e981ff8cf85004625bb 100644 (file)
@@ -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;
        }
index 420c7b807361bcd9911090209085619efe49c94c..fe0c27854da891e5ba82981955690afaf0d971a5 100644 (file)
@@ -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);
index e47d3da20d04bc1995a7bffe66a5e1a0e15a75bf..37acc995089e0b1208a0a6d2780dc22e767dd0c7 100644 (file)
@@ -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);