From 54d0332b13f6ccebcd77e149b098f16418c20d0b Mon Sep 17 00:00:00 2001 From: Alexander Opitz <opitz.alexander@googlemail.com> Date: Tue, 5 Dec 2017 13:46:27 +0100 Subject: [PATCH] [BUGFIX] Read TER XML entity value complete Improve reading the TER XML file while using the php xml extension. The character data handler could be called multiple times, so we shouldn't cut previous data away. Resolves: #83227 Releases: master, 8.7, 7.6 Change-Id: I9e96ade88da6a4709d1f72cd49fe766758d265fe Reviewed-on: https://review.typo3.org/54936 Reviewed-by: Stefan Neufeind <typo3.neufeind@speedpartner.de> Tested-by: Stefan Neufeind <typo3.neufeind@speedpartner.de> Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Jigal van Hemert <jigal.van.hemert@typo3.org> Tested-by: Jigal van Hemert <jigal.van.hemert@typo3.org> --- .../Utility/Parser/ExtensionXmlPushParser.php | 109 +++++++++--------- 1 file changed, 52 insertions(+), 57 deletions(-) diff --git a/typo3/sysext/extensionmanager/Classes/Utility/Parser/ExtensionXmlPushParser.php b/typo3/sysext/extensionmanager/Classes/Utility/Parser/ExtensionXmlPushParser.php index 176491b92e79..1da17099a575 100644 --- a/typo3/sysext/extensionmanager/Classes/Utility/Parser/ExtensionXmlPushParser.php +++ b/typo3/sysext/extensionmanager/Classes/Utility/Parser/ExtensionXmlPushParser.php @@ -27,11 +27,11 @@ namespace TYPO3\CMS\Extensionmanager\Utility\Parser; class ExtensionXmlPushParser extends AbstractExtensionXmlParser { /** - * Keeps current element to process. + * Keeps current data of element to process. * * @var string */ - protected $element = null; + protected $elementData = ''; /** * Class constructor. @@ -99,7 +99,7 @@ class ExtensionXmlPushParser extends AbstractExtensionXmlParser $this->version = $attrs['version']; break; default: - $this->element = $elementName; + $this->elementData = ''; } } @@ -119,8 +119,54 @@ class ExtensionXmlPushParser extends AbstractExtensionXmlParser $this->notify(); $this->resetProperties(); break; - default: - $this->element = null; + case 'downloadcounter': + // downloadcounter could be a child node of + // extension or version + if ($this->version == null) { + $this->extensionDownloadCounter = $this->elementData; + } else { + $this->versionDownloadCounter = $this->elementData; + } + break; + case 'title': + $this->title = $this->elementData; + break; + case 'description': + $this->description = $this->elementData; + break; + case 'state': + $this->state = $this->elementData; + break; + case 'reviewstate': + $this->reviewstate = $this->elementData; + break; + case 'category': + $this->category = $this->elementData; + break; + case 'lastuploaddate': + $this->lastuploaddate = $this->elementData; + break; + case 'uploadcomment': + $this->uploadcomment = $this->elementData; + break; + case 'dependencies': + $this->dependencies = $this->convertDependencies($this->elementData); + break; + case 'authorname': + $this->authorname = $this->elementData; + break; + case 'authoremail': + $this->authoremail = $this->elementData; + break; + case 'authorcompany': + $this->authorcompany = $this->elementData; + break; + case 'ownerusername': + $this->ownerusername = $this->elementData; + break; + case 't3xfilemd5': + $this->t3xfilemd5 = $this->elementData; + break; } } @@ -132,57 +178,6 @@ class ExtensionXmlPushParser extends AbstractExtensionXmlParser */ protected function characterData($parser, $data) { - if (isset($this->element)) { - switch ($this->element) { - case 'downloadcounter': - // downloadcounter could be a child node of - // extension or version - if ($this->version == null) { - $this->extensionDownloadCounter = $data; - } else { - $this->versionDownloadCounter = $data; - } - break; - case 'title': - $this->title = $data; - break; - case 'description': - $this->description .= $data; - break; - case 'state': - $this->state = $data; - break; - case 'reviewstate': - $this->reviewstate = $data; - break; - case 'category': - $this->category = $data; - break; - case 'lastuploaddate': - $this->lastuploaddate = $data; - break; - case 'uploadcomment': - $this->uploadcomment .= $data; - break; - case 'dependencies': - $this->dependencies = $this->convertDependencies($data); - break; - case 'authorname': - $this->authorname = $data; - break; - case 'authoremail': - $this->authoremail = $data; - break; - case 'authorcompany': - $this->authorcompany = $data; - break; - case 'ownerusername': - $this->ownerusername = $data; - break; - case 't3xfilemd5': - $this->t3xfilemd5 = $data; - break; - } - } + $this->elementData .= $data; } } -- GitLab