aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_versions
diff options
context:
space:
mode:
authorCôme Chilliet <come.chilliet@nextcloud.com>2022-10-11 10:10:49 +0200
committerCôme Chilliet <come.chilliet@nextcloud.com>2022-10-11 10:10:49 +0200
commit53cb5b8d079c012511fef47bdf7dd27e38ffe045 (patch)
treed7ed0d52af73a266a8e8ca829384e50e9d869cd0 /apps/files_versions
parent5fd3971f35bfd2a7b9e8cf8fd69050035da5e974 (diff)
downloadnextcloud-server-53cb5b8d079c012511fef47bdf7dd27e38ffe045.tar.gz
nextcloud-server-53cb5b8d079c012511fef47bdf7dd27e38ffe045.zip
Handle badly named version files more gracefully and log information
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Diffstat (limited to 'apps/files_versions')
-rw-r--r--apps/files_versions/lib/Storage.php18
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