From ce8c8202217bc0d357678d1b4155d3ded6ddb5f2 Mon Sep 17 00:00:00 2001
From: Philipp <admin@philipp.info>
Date: Fri, 6 Jan 2023 02:53:23 +0100
Subject: [PATCH] add description

---
 src/Core/Config/Util/ConfigFileManager.php | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/Core/Config/Util/ConfigFileManager.php b/src/Core/Config/Util/ConfigFileManager.php
index e4b84d1587..eb20317cb4 100644
--- a/src/Core/Config/Util/ConfigFileManager.php
+++ b/src/Core/Config/Util/ConfigFileManager.php
@@ -179,8 +179,15 @@ class ConfigFileManager
 
 		if (file_exists($filename)) {
 
+			// The fallback empty return content
 			$content = '<?php return [];';
 
+			/**
+			 * This code-block creates a readonly node.config.php content stream (fopen() with "r")
+			 * The stream is locked shared (LOCK_SH), so not exclusively, but the OS knows that there's a lock
+			 *
+			 * Any exclusive locking (LOCK_EX) would need to wait until all LOCK_SHs are unlocked
+			 */
 			$configStream = fopen($filename, 'r');
 			try {
 				if (flock($configStream, LOCK_SH)) {
@@ -190,10 +197,18 @@ class ConfigFileManager
 					}
 				}
 			} finally {
+				// unlock and close the stream for every circumstances
 				flock($configStream, LOCK_UN);
 				fclose($configStream);
 			}
 
+			/**
+			 * Evaluate the fetched content
+			 *
+			 * @note
+			 * Because `eval()` directly evaluates PHP content, we need to "close" the expected PHP content again with
+			 * the prefixed "?>". Now we're in plain HTML again and can evaluate any PHP file :-)
+			 */
 			$dataArray = eval('?>' . $content);
 
 			if (is_array($dataArray)) {
@@ -229,7 +244,7 @@ class ConfigFileManager
 					$content = fread($configStream, filesize($filename));
 					rewind($configStream);
 					if (!$content) {
-						throw new ConfigFileException(sprintf('Couldn\'t read file %s', $filename));
+						throw new ConfigFileException(sprintf('Cannot read file %s', $filename));
 					}
 
 					$dataArray = eval('?>' . $content);
-- 
2.39.5