diff --git a/src/Symfony/Component/Validator/Constraints/IsbnValidator.php b/src/Symfony/Component/Validator/Constraints/IsbnValidator.php index 62a3b0388e3b6..4ff68974875c6 100644 --- a/src/Symfony/Component/Validator/Constraints/IsbnValidator.php +++ b/src/Symfony/Component/Validator/Constraints/IsbnValidator.php @@ -45,7 +45,7 @@ public function validate($value, Constraint $constraint) $value = strtoupper($value); $valueLength = strlen($value); - if (10 === $valueLength && null !== $constraint->isbn10) { + if (10 === $valueLength && null !== $constraint->isbn10 && false !== $constraint->isbn10) { for ($i = 0; $i < 10; $i++) { if ($value[$i] == 'X') { $validation += 10 * intval(10 - $i); @@ -55,13 +55,13 @@ public function validate($value, Constraint $constraint) } if ($validation % 11 != 0) { - if (null !== $constraint->isbn13) { + if (null !== $constraint->isbn13 && false !== $constraint->isbn13) { $this->context->addViolation($constraint->bothIsbnMessage); } else { $this->context->addViolation($constraint->isbn10Message); } } - } elseif (13 === $valueLength && null !== $constraint->isbn13) { + } elseif (13 === $valueLength && null !== $constraint->isbn13 && false !== $constraint->isbn13) { for ($i = 0; $i < 13; $i += 2) { $validation += intval($value[$i]); } @@ -70,16 +70,18 @@ public function validate($value, Constraint $constraint) } if ($validation % 10 != 0) { - if (null !== $constraint->isbn10) { + if (null !== $constraint->isbn10 && false !== $constraint->isbn10) { $this->context->addViolation($constraint->bothIsbnMessage); } else { $this->context->addViolation($constraint->isbn13Message); } } } else { - if (null !== $constraint->isbn10 && null !== $constraint->isbn13) { + if (null !== $constraint->isbn10 && null !== $constraint->isbn13 && + false !== $constraint->isbn10 && false !== $constraint->isbn13 + ) { $this->context->addViolation($constraint->bothIsbnMessage); - } elseif (null !== $constraint->isbn10) { + } elseif (null !== $constraint->isbn10 && false !== $constraint->isbn10) { $this->context->addViolation($constraint->isbn10Message); } else { $this->context->addViolation($constraint->isbn13Message); diff --git a/src/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php index 7f0859b999e08..ebf52fb79ad73 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/IsbnValidatorTest.php @@ -220,4 +220,18 @@ public function testInvalidIsbn($isbn) $this->validator->validate($isbn, $constraint); } + + /** + * @dataProvider getInvalidIsbn + */ + public function testInvalidIsbnMixed($isbn) + { + $constraint = new Isbn(array('isbn10' => false, 'isbn13' => true)); + $this->context + ->expects($this->once()) + ->method('addViolation') + ->with($constraint->isbn13Message); + + $this->validator->validate($isbn, $constraint); + } }