diff options
author | Côme Chilliet <91878298+come-nc@users.noreply.github.com> | 2022-11-21 16:18:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-21 16:18:42 +0100 |
commit | d0c72cc11a14f4c1d9ca9db82ed4f2b19346bfb6 (patch) | |
tree | 8b5bd58daf47556794e96867dba17aa46784f6da | |
parent | c2cb790532f2a7ea5a9ad39167d95b69c9ed6c10 (diff) | |
parent | 53cb5b8d079c012511fef47bdf7dd27e38ffe045 (diff) | |
download | nextcloud-server-d0c72cc11a14f4c1d9ca9db82ed4f2b19346bfb6.tar.gz nextcloud-server-d0c72cc11a14f4c1d9ca9db82ed4f2b19346bfb6.zip |
Merge pull request #34528 from nextcloud/fix/files_versions-clean-handling-of-bad-names
Handle badly named version files more gracefully and log information
-rw-r--r-- | apps/files_versions/lib/Storage.php | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php index e314eddb945..024e1debc92 100644 --- a/apps/files_versions/lib/Storage.php +++ b/apps/files_versions/lib/Storage.php @@ -176,7 +176,6 @@ class Storage { * store a new version of a file. */ public static function store($filename) { - // if the file gets streamed we need to remove the .part extension // to get the right target $ext = pathinfo($filename, PATHINFO_EXTENSION); @@ -357,7 +356,6 @@ class Storage { * @return bool */ public static function rollback(string $file, int $revision, IUser $user) { - // add expected leading slash $filename = '/' . ltrim($file, '/'); @@ -495,11 +493,21 @@ class Storage { $filename = $pathparts['filename']; if ($filename === $versionedFile) { $pathparts = pathinfo($entryName); - $timestamp = substr($pathparts['extension'], 1); + $timestamp = substr($pathparts['extension'] ?? '', 1); + if (!is_numeric($timestamp)) { + \OC::$server->get(LoggerInterface::class)->error( + 'Version file {path} has incorrect name format', + [ + 'path' => $entryName, + 'app' => 'files_versions', + ] + ); + continue; + } $filename = $pathparts['filename']; $key = $timestamp . '#' . $filename; $versions[$key]['version'] = $timestamp; - $versions[$key]['humanReadableTimestamp'] = self::getHumanReadableTimestamp($timestamp); + $versions[$key]['humanReadableTimestamp'] = self::getHumanReadableTimestamp((int)$timestamp); if (empty($userFullPath)) { $versions[$key]['preview'] = ''; } else { @@ -578,7 +586,7 @@ class Storage { * @param int $timestamp * @return string for example "5 days ago" */ - private static function getHumanReadableTimestamp($timestamp) { + private static function getHumanReadableTimestamp(int $timestamp): string { $diff = time() - $timestamp; if ($diff < 60) { // first minute |