From 2ecf5722ec98371be526fd72d67dd63308eaa2dd Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Sun, 25 Sep 2016 18:58:05 +0200 Subject: [PATCH] Graceful error handling and logging Right now a failed "copyr" will result in the error log being spammed with not really helpful error messages. Also situations such as `$dir` returning `false` are not really caught. This adds more error handling and logging to make debugging such situations easier. Signed-off-by: Lukas Reschke --- lib/private/legacy/util.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/private/legacy/util.php b/lib/private/legacy/util.php index a975da3927..a2f055b902 100644 --- a/lib/private/legacy/util.php +++ b/lib/private/legacy/util.php @@ -336,7 +336,16 @@ class OC_Util { * @return void */ public static function copyr($source, \OCP\Files\Folder $target) { + $logger = \OC::$server->getLogger(); + + // Verify if folder exists $dir = opendir($source); + if($dir === false) { + $logger->error(sprintf('Could not opendir "%s"', $source), ['app' => 'core']); + return; + } + + // Copy the files while (false !== ($file = readdir($dir))) { if (!\OC\Files\Filesystem::isIgnoredDir($file)) { if (is_dir($source . '/' . $file)) { @@ -344,7 +353,13 @@ class OC_Util { self::copyr($source . '/' . $file, $child); } else { $child = $target->newFile($file); - stream_copy_to_stream(fopen($source . '/' . $file,'r'), $child->fopen('w')); + $sourceStream = fopen($source . '/' . $file, 'r'); + if($sourceStream === false) { + $logger->error(sprintf('Could not fopen "%s"', $source . '/' . $file), ['app' => 'core']); + closedir($dir); + return; + } + stream_copy_to_stream($sourceStream, $child->fopen('w')); } } }