summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--ext/standard/file.c26
-rw-r--r--ext/standard/file.h1
3 files changed, 20 insertions, 8 deletions
diff --git a/NEWS b/NEWS
index a42bab5b17..f8a87e7dde 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,7 @@
- Changed deprecated ini options on startup from E_WARNING to E_DEPRECATED.
(Kalle)
+- Changed the $context parameter on copy() to actually have an effect. (Kalle)
- Fixed bug #52573 (SplFileObject::fscanf Segmentation fault). (Felipe)
- Fixed bug #52546 (pdo_dblib segmentation fault when iterating MONEY values).
diff --git a/ext/standard/file.c b/ext/standard/file.c
index 58c111253e..e8311a3c65 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -1694,7 +1694,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_ctx(source, target, 0, context TSRMLS_CC) == SUCCESS) {
RETURN_TRUE;
} else {
RETURN_FALSE;
@@ -1702,21 +1702,31 @@ PHP_FUNCTION(copy)
}
/* }}} */
-PHPAPI int php_copy_file(char *src, char *dest TSRMLS_DC) /* {{{ */
+/* {{{ php_copy_file
+ */
+PHPAPI int php_copy_file(char *src, char *dest TSRMLS_DC)
{
- return php_copy_file_ex(src, dest, ENFORCE_SAFE_MODE TSRMLS_CC);
+ return php_copy_file_ctx(src, dest, ENFORCE_SAFE_MODE, NULL TSRMLS_CC);
}
/* }}} */
-/* {{{ php_copy_file
+/* {{{ php_copy_file_ex
*/
PHPAPI int php_copy_file_ex(char *src, char *dest, int src_chk TSRMLS_DC)
{
+ return php_copy_file_ctx(src, dest, ENFORCE_SAFE_MODE, NULL TSRMLS_CC);
+}
+/* }}} */
+
+/* {{{ php_copy_file_ctx
+ */
+PHPAPI int php_copy_file_ctx(char *src, char *dest, int src_chk, php_stream_context *context 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, context)) {
case -1:
/* non-statable stream */
goto safe_to_copy;
@@ -1731,7 +1741,7 @@ PHPAPI int php_copy_file_ex(char *src, char *dest, int src_chk 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, context)) {
case -1:
/* non-statable stream */
goto safe_to_copy;
@@ -1781,13 +1791,13 @@ no_stat:
}
safe_to_copy:
- srcstream = php_stream_open_wrapper(src, "rb", src_chk | REPORT_ERRORS, NULL);
+ srcstream = php_stream_open_wrapper_ex(src, "rb", src_chk | REPORT_ERRORS, NULL, context);
if (!srcstream) {
return ret;
}
- deststream = php_stream_open_wrapper(dest, "wb", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
+ deststream = php_stream_open_wrapper_ex(dest, "wb", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL, context);
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..7e2f400668 100644
--- a/ext/standard/file.h
+++ b/ext/standard/file.h
@@ -76,6 +76,7 @@ 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_ctx(char *src, char *dest, int src_chk, php_stream_context *context 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);