From c470e1a02cfba95119dd21e3ddfbbf35152811ac Mon Sep 17 00:00:00 2001 From: Sztig Date: Mon, 26 Jan 2026 15:45:48 +0100 Subject: [PATCH 1/5] added isset check on simplexml_load_string --- .../Legacy/Content/FieldValue/Converter/SelectionConverter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionConverter.php b/src/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionConverter.php index f2f14815f1..4d79383a7f 100644 --- a/src/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionConverter.php +++ b/src/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionConverter.php @@ -119,7 +119,7 @@ public function toFieldDefinition(StorageFieldDefinition $storageDef, FieldDefin } foreach ($storageDef->multilingualData as $languageCode => $mlData) { - $xml = simplexml_load_string($mlData->dataText); + $xml = isset($mlData->dataText) ? simplexml_load_string($mlData->dataText) : false; if ($xml !== false) { foreach ($xml->options->option as $option) { $multiLingualOptions[$languageCode][(int)$option['id']] = (string)$option['name']; From 9d2c98014e663c988bbf4726c9a598c8c6d78880 Mon Sep 17 00:00:00 2001 From: Sztig Date: Mon, 26 Jan 2026 16:14:42 +0100 Subject: [PATCH 2/5] phpstan fix --- .../Legacy/Content/FieldValue/Converter/SelectionConverter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionConverter.php b/src/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionConverter.php index 4d79383a7f..2341bfda28 100644 --- a/src/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionConverter.php +++ b/src/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionConverter.php @@ -119,7 +119,7 @@ public function toFieldDefinition(StorageFieldDefinition $storageDef, FieldDefin } foreach ($storageDef->multilingualData as $languageCode => $mlData) { - $xml = isset($mlData->dataText) ? simplexml_load_string($mlData->dataText) : false; + $xml = $mlData->dataText ? simplexml_load_string($mlData->dataText) : false; if ($xml !== false) { foreach ($xml->options->option as $option) { $multiLingualOptions[$languageCode][(int)$option['id']] = (string)$option['name']; From 69acb8225e0c5f608ada6ee2a3b968cc53833252 Mon Sep 17 00:00:00 2001 From: Sztig Date: Thu, 9 Apr 2026 12:24:34 +0200 Subject: [PATCH 3/5] added test coverage for multilingualData with an empty ml --- .../FieldValue/Converter/SelectionTest.php | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php b/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php index 24aab067b1..f7cf62642b 100644 --- a/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php +++ b/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php @@ -11,6 +11,7 @@ use Ibexa\Contracts\Core\Persistence\Content\Type\FieldDefinition as PersistenceFieldDefinition; use Ibexa\Core\FieldType\FieldSettings; use Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\SelectionConverter; +use Ibexa\Core\Persistence\Legacy\Content\MultilingualStorageFieldDefinition; use Ibexa\Core\Persistence\Legacy\Content\StorageFieldDefinition; use Ibexa\Core\Persistence\Legacy\Content\StorageFieldValue; use PHPUnit\Framework\TestCase; @@ -325,6 +326,47 @@ public function testToFieldDefinitionSingleEmpty() $this->assertEquals($expectedFieldDefinition, $actualFieldDefinition); } + + /** + * @group fieldType + * @group selection + */ + public function testToFieldDefinitionWithMultilingualDataSkipsEmptyDataText(): void + { + $storageFieldDefinition = new StorageFieldDefinition(); + $storageFieldDefinition->dataInt1 = 1; + $storageFieldDefinition->dataText5 = << + +EOT; + + $mlDataEmpty = new MultilingualStorageFieldDefinition(); + $mlDataEmpty->dataText = ''; + + $mlDataValid = new MultilingualStorageFieldDefinition(); + $mlDataValid->dataText = << + +EOT; + + $storageFieldDefinition->multilingualData = [ + 'eng-GB' => $mlDataEmpty, + 'fre-FR' => $mlDataValid, + ]; + + $actualFieldDefinition = new PersistenceFieldDefinition( + [ + 'mainLanguageCode' => 'eng-GB', + ] + ); + + $this->converter->toFieldDefinition($storageFieldDefinition, $actualFieldDefinition); + + $fieldSettings = $actualFieldDefinition->fieldTypeConstraints->fieldSettings; + + $this->assertSame([0 => 'First'], $fieldSettings['multilingualOptions']['eng-GB']); + $this->assertSame([0 => 'Premier'], $fieldSettings['multilingualOptions']['fre-FR']); + } } class_alias(SelectionTest::class, 'eZ\Publish\Core\Persistence\Legacy\Tests\Content\FieldValue\Converter\SelectionTest'); From ff537218d5306a58cd2d431807ff9711e2f42c35 Mon Sep 17 00:00:00 2001 From: Sztig Date: Thu, 9 Apr 2026 12:51:36 +0200 Subject: [PATCH 4/5] implemented suggested changes --- .../Legacy/Content/FieldValue/Converter/SelectionTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php b/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php index f7cf62642b..5753e762c6 100644 --- a/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php +++ b/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php @@ -364,8 +364,8 @@ public function testToFieldDefinitionWithMultilingualDataSkipsEmptyDataText(): v $fieldSettings = $actualFieldDefinition->fieldTypeConstraints->fieldSettings; - $this->assertSame([0 => 'First'], $fieldSettings['multilingualOptions']['eng-GB']); - $this->assertSame([0 => 'Premier'], $fieldSettings['multilingualOptions']['fre-FR']); + self::assertSame([0 => 'First'], $fieldSettings['multilingualOptions']['eng-GB']); + self::assertSame([0 => 'Premier'], $fieldSettings['multilingualOptions']['fre-FR']); } } From 5ee99f1c2a8d29995b71ec746bdc03e06ce758e4 Mon Sep 17 00:00:00 2001 From: Sztig Date: Thu, 9 Apr 2026 12:58:57 +0200 Subject: [PATCH 5/5] implemented suggested changes --- .../Legacy/Content/FieldValue/Converter/SelectionTest.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php b/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php index 5753e762c6..9d4a41482b 100644 --- a/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php +++ b/tests/lib/Persistence/Legacy/Content/FieldValue/Converter/SelectionTest.php @@ -327,10 +327,6 @@ public function testToFieldDefinitionSingleEmpty() $this->assertEquals($expectedFieldDefinition, $actualFieldDefinition); } - /** - * @group fieldType - * @group selection - */ public function testToFieldDefinitionWithMultilingualDataSkipsEmptyDataText(): void { $storageFieldDefinition = new StorageFieldDefinition();