From d4b2d2158aab71ed691e16085d1fa0a52d8290a2 Mon Sep 17 00:00:00 2001
From: Steffen Ritter <info@rs-websystems.de>
Date: Tue, 18 Feb 2014 14:18:08 +0100
Subject: [PATCH] [BUGFIX] Indexer does not update the FileObjects

If the Indexer updates metadata during runtimer (after a file object)
has been created, the file object itself is not updated.

This leads to possible errors with image rendering, if files are to be
shown which have not been indexed before.

Releases: 6.2
Resolves: #53772
Change-Id: I70be5ebefe1e00e903694a576847fa8fba167461
Reviewed-on: https://review.typo3.org/27690
Reviewed-by: Markus Klein
Tested-by: Markus Klein
Reviewed-by: Wouter Wolters
Tested-by: Wouter Wolters
---
 typo3/sysext/core/Classes/Resource/File.php      | 16 ++++++++++++++++
 .../core/Classes/Resource/Index/Indexer.php      |  2 ++
 2 files changed, 18 insertions(+)

diff --git a/typo3/sysext/core/Classes/Resource/File.php b/typo3/sysext/core/Classes/Resource/File.php
index 6e4c78332877..114b0d7217cf 100644
--- a/typo3/sysext/core/Classes/Resource/File.php
+++ b/typo3/sysext/core/Classes/Resource/File.php
@@ -250,6 +250,22 @@ class File extends AbstractFile {
 		}
 	}
 
+	/**
+	 * Updates MetaData properties
+	 *
+	 * @internal Do not use outside the FileAbstraction Layer classes
+	 *
+	 * @param array $properties
+	 * @return void
+	 */
+	public function _updateMetaDataProperties(array $properties) {
+		if ($this->metaDataProperties !== NULL) {
+			$this->metaDataProperties = array_merge($this->metaDataProperties, $properties);
+		} else {
+			$this->metaDataProperties = $properties;
+		}
+	}
+
 	/**
 	 * Returns the names of all properties that have been updated in this record
 	 *
diff --git a/typo3/sysext/core/Classes/Resource/Index/Indexer.php b/typo3/sysext/core/Classes/Resource/Index/Indexer.php
index a0d133d2e9d7..898879fee658 100644
--- a/typo3/sysext/core/Classes/Resource/Index/Indexer.php
+++ b/typo3/sysext/core/Classes/Resource/Index/Indexer.php
@@ -120,6 +120,7 @@ class Indexer {
 			foreach ($newMetaData as $data) {
 				$metaData = array_merge($metaData, $data);
 			}
+			$fileObject->_updateMetaDataProperties($metaData);
 			$this->getMetaDataRepository()->update($fileObject->getUid(), $metaData);
 			$this->getFileIndexRepository()->updateIndexingTime($fileObject->getUid());
 		}
@@ -220,6 +221,7 @@ class Indexer {
 			$metaData = array();
 			list($metaData['width'], $metaData['height']) = getimagesize($rawFileLocation);
 			$this->getMetaDataRepository()->update($fileObject->getUid(), $metaData);
+			$fileObject->_updateMetaDataProperties($metaData);
 		}
 	}
 
-- 
GitLab