From 25608d6bd4d2aa71c84070b8a81f325c0be2d785 Mon Sep 17 00:00:00 2001
From: Thomas Maroschik <tmaroschik@dfau.de>
Date: Tue, 15 Oct 2013 11:28:41 +0200
Subject: [PATCH] [BUGFIX] Preserve vendor name in refering request

Fluid FormViewHelper adds some hidden fields that contain information
about the current controller. When the form is submitted and contains
a validation error the errorAction int the ActionController is hit.
This one builds a refering request object from the hidden fields without
a vendor name, as this one is not passed from the FormViewHelper.
The request object tries to guess the controller name but guesses a non
namespaced classes name as the vendor name is not given. To get further
information about the class methods the class name gets autoloaded and
creates a wrong classes cache entry as the autoloader cannot detect if
a extension has namespaced or non namespaced classes from the outside.

This patch introduces a hidden vendor name field in the Fluid FormViewHelper.

Fixes: #52823
Releases: 6.2, 6.1, 6.0
Change-Id: I0a82cf2ee07ce293eda0b9f50d3cac7b2a513f15
Reviewed-on: https://review.typo3.org/24787
Reviewed-by: Stefan Neufeind
Tested-by: Stefan Neufeind
---
 typo3/sysext/fluid/Classes/ViewHelpers/FormViewHelper.php | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/FormViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/FormViewHelper.php
index 1e8ce2ff8dfa..47fe1816ca78 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/FormViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/FormViewHelper.php
@@ -251,11 +251,13 @@ class FormViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewH
 	protected function renderHiddenReferrerFields() {
 		$request = $this->controllerContext->getRequest();
 		$extensionName = $request->getControllerExtensionName();
+		$vendorName = $request->getControllerVendorName();
 		$controllerName = $request->getControllerName();
 		$actionName = $request->getControllerActionName();
 		$result = chr(10);
 		if ($this->configurationManager->isFeatureEnabled('rewrittenPropertyMapper')) {
 			$result .= '<input type="hidden" name="' . $this->prefixFieldName('__referrer[@extension]') . '" value="' . $extensionName . '" />' . chr(10);
+			if ($vendorName !== NULL) $result .= '<input type="hidden" name="' . $this->prefixFieldName('__referrer[@vendor]') . '" value="' . $vendorName . '" />' . chr(10);
 			$result .= '<input type="hidden" name="' . $this->prefixFieldName('__referrer[@controller]') . '" value="' . $controllerName . '" />' . chr(10);
 			$result .= '<input type="hidden" name="' . $this->prefixFieldName('__referrer[@action]') . '" value="' . $actionName . '" />' . chr(10);
 			$result .= '<input type="hidden" name="' . $this->prefixFieldName('__referrer[arguments]') . '" value="' . htmlspecialchars($this->hashService->appendHmac(base64_encode(serialize($request->getArguments())))) . '" />' . chr(10);
-- 
GitLab