From 0610750378f78f3c402d74bcee2e94184d95809c Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Thu, 2 May 2013 17:25:58 +0200 Subject: [PATCH] if the repository method returns an array ensure that it's internal poin... --- .../Constraints/UniqueValidatorTest.php | 25 +++++++++++++++++++ .../Constraints/UniqueEntityValidator.php | 2 ++ 2 files changed, 27 insertions(+) diff --git a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueValidatorTest.php b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueValidatorTest.php index ed21bb0601..efedfd9244 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueValidatorTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueValidatorTest.php @@ -294,6 +294,31 @@ class UniqueValidatorTest extends DoctrineOrmTestCase $this->assertEquals(0, $violationsList->count(), 'Violation is using custom repository method.'); } + public function testValidateUniquenessWithUnrewoundArray() + { + $entity = new SingleIdentEntity(1, 'foo'); + + $entityManagerName = 'foo'; + $repository = $this->createRepositoryMock(); + $repository->expects($this->once()) + ->method('findByCustom') + ->will( + $this->returnCallback(function() use ($entity) { + $returnValue = array( + $entity, + ); + next($returnValue); + return $returnValue; + }) + ) + ; + $em = $this->createEntityManagerMock($repository); + $validator = $this->createValidator($entityManagerName, $em, null, array(), null, 'findByCustom'); + + $violationsList = $validator->validate($entity); + $this->assertCount(0, $violationsList, 'Violation is using unrewound array as return value in the repository method.'); + } + /** * @group GH-1635 */ diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php index 2fca73fb60..440b5c1d32 100644 --- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php +++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php @@ -108,6 +108,8 @@ class UniqueEntityValidator extends ConstraintValidator */ if ($result instanceof \Iterator) { $result->rewind(); + } elseif (is_array($result)) { + reset($result); } /* If no entity matched the query criteria or a single entity matched,