[BUGFIX] Prevent uncaught exception in Import/Export controller 82/53282/3
authorNicole Cordes <typo3@cordes.co>
Tue, 4 Apr 2017 13:26:43 +0000 (15:26 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Tue, 20 Jun 2017 12:08:19 +0000 (14:08 +0200)
Currently an error is thrown if no post data was sent to the
ImportExportController. This can easily happen if a t3d file should
be uploaded but is larger than the configured post_max_size of the
server. This patch checks the incoming information, sets the import
action as default and displays an information to the user that he/she
may have tried to upload a file that was too large.

Resolves: #80681
Releases: master, 8.7, 7.6
Change-Id: I561dbf6abd74acace3eff179a513b4f9128d792d
Reviewed-on: https://review.typo3.org/53282
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
typo3/sysext/impexp/Classes/Controller/ImportExportController.php
typo3/sysext/impexp/Resources/Private/Language/locallang.xlf

index f9ed8d8..b72ffeb 100644 (file)
@@ -186,6 +186,22 @@ class ImportExportController extends BaseScriptClass
 
         // Input data grabbed:
         $inData = GeneralUtility::_GP('tx_impexp');
+        if ($inData === null) {
+            // This happens if the post request was larger than allowed on the server
+            // We set the import action as default and output a user information
+            $inData = [
+                'action' => 'import',
+            ];
+            $flashMessage = GeneralUtility::makeInstance(
+                FlashMessage::class,
+                $this->getLanguageService()->getLL('importdata_upload_nodata'),
+                $this->getLanguageService()->getLL('importdata_upload_error'),
+                FlashMessage::ERROR
+            );
+            $flashMessageService = GeneralUtility::makeInstance(FlashMessageService::class);
+            $defaultFlashMessageQueue = $flashMessageService->getMessageQueueByIdentifier();
+            $defaultFlashMessageQueue->enqueue($flashMessage);
+        }
         $this->standaloneView->assign('moduleUrl', BackendUtility::getModuleUrl('xMOD_tximpexp'));
         $this->standaloneView->assign('id', $this->id);
         $this->standaloneView->assign('inData', $inData);
index f4ab7b0..19cee3a 100644 (file)
                        <trans-unit id="importdata_upload">
                                <source>Upload</source>
                        </trans-unit>
+                       <trans-unit id="importdata_upload_error">
+                               <source>Upload error</source>
+                       </trans-unit>
+                       <trans-unit id="importdata_upload_nodata">
+                               <source>The import module hasn't received any data. This may occur due to a file upload with a large file. Please check the file size of your uploaded file with the server's post_max_size and upload_max_filesize configuration.</source>
+                       </trans-unit>
                        <trans-unit id="importdata_metaData">
                                <source>Meta data:</source>
                        </trans-unit>