From a9d3d48e9b49754082f154ab63bae61b38b9fe20 Mon Sep 17 00:00:00 2001 From: Elias Date: Fri, 19 Jul 2024 09:12:38 +0200 Subject: [PATCH] [BUGFIX] Fixed import, when users temp preview file is corrupt (#414) * Fixed import, when users temp preview file is corrupt * Apply php-cs-fixer changes --------- Co-authored-by: turbo-ele Co-authored-by: Christian F. --- src/Controller/ConfigDataObjectController.php | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/Controller/ConfigDataObjectController.php b/src/Controller/ConfigDataObjectController.php index 90134186..1c3841d2 100644 --- a/src/Controller/ConfigDataObjectController.php +++ b/src/Controller/ConfigDataObjectController.php @@ -122,8 +122,14 @@ protected function loadAvailableColumnHeaders( try { $interpreter = $interpreterFactory->loadInterpreter($configName, $config['interpreterConfig'], $config['processingConfig']); $dataPreview = $interpreter->previewData($previewFilePath); + $columnHeaders = $dataPreview->getDataColumnHeaders(); - return $dataPreview->getDataColumnHeaders(); + // Validate if the column headers are valid JSON. Otherwise take care of the preview file to be deleted. + if (!$this->isValidJson($columnHeaders)) { + throw new \Exception('Invalid column headers.'); + } + + return $columnHeaders; } catch (Exception $e) { Logger::warning($e); } @@ -132,6 +138,13 @@ protected function loadAvailableColumnHeaders( return []; } + protected function isValidJson(array $array): bool + { + json_encode($array); + + return json_last_error() === \JSON_ERROR_NONE; + } + /** * @Route("/get") * @@ -287,6 +300,7 @@ public function loadDataPreviewAction( $hasData = false; $errorMessage = ''; $previewFilePath = $this->previewService->getLocalPreviewFile($configName, $this->getPimcoreUser()); + $dataPreviewData = []; if (is_file($previewFilePath)) { $config = $configurationPreparationService->prepareConfiguration($configName, $currentConfig); @@ -304,6 +318,13 @@ public function loadDataPreviewAction( if ($interpreter->fileValid($previewFilePath)) { $dataPreview = $interpreter->previewData($previewFilePath, $recordNumber, $mappedColumns); $hasData = true; + + $preview = $dataPreview->getDataPreview(); + if (!$this->isValidJson($preview)) { + unlink($previewFilePath); + throw new \Exception('Invalid data preview. Deleted preview data.'); + } + $dataPreviewData = $preview; } else { $errorMessage = $translator->trans('plugin_pimcore_datahub_data_importer_configpanel_preview_error_invalid_file', [], 'admin'); } @@ -314,7 +335,7 @@ public function loadDataPreviewAction( } return new JsonResponse([ - 'dataPreview' => $dataPreview ? $dataPreview->getDataPreview() : [], + 'dataPreview' => $dataPreviewData, 'previewRecordIndex' => $dataPreview ? $dataPreview->getRecordNumber() : 0, 'hasData' => $hasData, 'errorMessage' => $errorMessage