From 156533febb1fcd535a30dabb75560086395a7b6c Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Tue, 28 Nov 2023 16:11:24 +0000 Subject: [PATCH] Issue #3404039 by Wim Leers: PluginExistsConstraintValidator should return early if given NULL --- .../Constraint/PluginExistsConstraintValidator.php | 4 ++++ .../Core/Plugin/PluginExistsConstraintValidatorTest.php | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/core/lib/Drupal/Core/Plugin/Plugin/Validation/Constraint/PluginExistsConstraintValidator.php b/core/lib/Drupal/Core/Plugin/Plugin/Validation/Constraint/PluginExistsConstraintValidator.php index 2e9a8c33ae0b..b862bc339dfe 100644 --- a/core/lib/Drupal/Core/Plugin/Plugin/Validation/Constraint/PluginExistsConstraintValidator.php +++ b/core/lib/Drupal/Core/Plugin/Plugin/Validation/Constraint/PluginExistsConstraintValidator.php @@ -20,6 +20,10 @@ class PluginExistsConstraintValidator extends ConstraintValidator { public function validate(mixed $plugin_id, Constraint $constraint) { assert($constraint instanceof PluginExistsConstraint); + if ($plugin_id === NULL) { + return; + } + $definition = $constraint->pluginManager->getDefinition($plugin_id, FALSE); // Some plugin managers provide fallbacks. if ($constraint->pluginManager instanceof FallbackPluginManagerInterface) { diff --git a/core/tests/Drupal/KernelTests/Core/Plugin/PluginExistsConstraintValidatorTest.php b/core/tests/Drupal/KernelTests/Core/Plugin/PluginExistsConstraintValidatorTest.php index 6c34c8f03380..3106db326968 100644 --- a/core/tests/Drupal/KernelTests/Core/Plugin/PluginExistsConstraintValidatorTest.php +++ b/core/tests/Drupal/KernelTests/Core/Plugin/PluginExistsConstraintValidatorTest.php @@ -61,6 +61,11 @@ public function testValidation(): void { $violations = $data->validate(); $this->assertCount(1, $violations); $this->assertSame("The 'action_test_save_entity' plugin must implement or extend " . MenuInterface::class . '.', (string) $violations->get(0)->getMessage()); + + // No validation is attempted on a NULL value. + $data->setValue(NULL); + $violations = $data->validate(); + $this->assertCount(0, $violations); } } -- GitLab