From 55547c56e437d4c72cfbc55a4a0126cf9763a491 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Mon, 11 Jul 2016 11:14:00 +0900 Subject: [PATCH] Do not use safe_overwrite if target directory is not writable --- common/framework/storage.php | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/common/framework/storage.php b/common/framework/storage.php index 969d880d9..88367e8bc 100644 --- a/common/framework/storage.php +++ b/common/framework/storage.php @@ -240,11 +240,16 @@ class Storage } } - if (self::$safe_overwrite && strncasecmp($mode, 'a', 1)) + if (self::$safe_overwrite && strncasecmp($mode, 'a', 1) && @is_writable($destination_dir)) { + $use_atomic_rename = true; $original_filename = $filename; $filename = $filename . '.tmp.' . microtime(true); } + else + { + $use_atomic_rename = false; + } if ($fp = @fopen($filename, $mode)) { @@ -275,7 +280,7 @@ class Storage @chmod($filename, ($perms === null ? (0666 & ~self::getUmask()) : $perms)); - if (self::$safe_overwrite && strncasecmp($mode, 'a', 1)) + if ($use_atomic_rename) { $rename_success = @rename($filename, $original_filename); if (!$rename_success) @@ -350,14 +355,20 @@ class Storage } elseif (self::isDirectory($destination)) { + $destination_dir = $destination; $destination = $destination . '/' . basename($source); } - if (self::$safe_overwrite) + if (self::$safe_overwrite && @is_writable($destination_dir)) { + $use_atomic_rename = true; $original_destination = $destination; $destination = $destination . '.tmp.' . microtime(true); } + else + { + $use_atomic_rename = false; + } $copy_success = @copy($source, $destination); if (!$copy_success) @@ -382,7 +393,7 @@ class Storage @chmod($destination, $destination_perms); } - if (self::$safe_overwrite) + if ($use_atomic_rename) { $rename_success = @rename($destination, $original_destination); if (!$rename_success)