Skip to content

Commit

Permalink
Do not allow to denormalize string with spaces to valid DateTime object
Browse files Browse the repository at this point in the history
  • Loading branch information
sidz committed Jun 3, 2021
1 parent c71e9ba commit f6ab2bf
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 1 deletion.
Expand Up @@ -97,7 +97,7 @@ public function denormalize($data, $type, $format = null, array $context = [])
$dateTimeFormat = $context[self::FORMAT_KEY] ?? null;
$timezone = $this->getTimezone($context);

if ('' === $data || null === $data) {
if (null === $data || (\is_string($data) && '' === trim($data))) {
throw new NotNormalizableValueException('The data is either an empty string or null, you should pass a string that can be parsed with the passed format or a valid DateTime string.');
}

Expand Down
Expand Up @@ -201,6 +201,7 @@ public function testDenormalize()
$this->assertEquals(new \DateTimeImmutable('2016/01/01', new \DateTimeZone('UTC')), $this->normalizer->denormalize('2016-01-01T00:00:00+00:00', \DateTimeInterface::class));
$this->assertEquals(new \DateTimeImmutable('2016/01/01', new \DateTimeZone('UTC')), $this->normalizer->denormalize('2016-01-01T00:00:00+00:00', \DateTimeImmutable::class));
$this->assertEquals(new \DateTime('2016/01/01', new \DateTimeZone('UTC')), $this->normalizer->denormalize('2016-01-01T00:00:00+00:00', \DateTime::class));
$this->assertEquals(new \DateTime('2016/01/01', new \DateTimeZone('UTC')), $this->normalizer->denormalize(' 2016-01-01T00:00:00+00:00 ', \DateTime::class));
}

public function testDenormalizeUsingTimezonePassedInConstructor()
Expand Down Expand Up @@ -290,6 +291,20 @@ public function testDenormalizeEmptyStringThrowsException()
$this->normalizer->denormalize('', \DateTimeInterface::class);
}

public function testDenormalizeStringWithSpacesOnlyThrowsAnException()
{
$this->expectException(UnexpectedValueException::class);
$this->expectExceptionMessage('The data is either an empty string or null, you should pass a string that can be parsed with the passed format or a valid DateTime string.');
$this->normalizer->denormalize(' ', \DateTimeInterface::class);
}

public function testDenormalizeDateTimeStringWithSpacesUsingFormatPassedInContextThrowsAnException()
{
$this->expectException(UnexpectedValueException::class);
$this->expectExceptionMessage("Parsing datetime string \" 2016.01.01 \" using format \"Y.m.d|\" resulted in 2 errors:\nat position 0: Unexpected data found.\nat position 12: Trailing data");
$this->normalizer->denormalize(' 2016.01.01 ', \DateTime::class, null, [DateTimeNormalizer::FORMAT_KEY => 'Y.m.d|']);
}

public function testDenormalizeFormatMismatchThrowsException()
{
$this->expectException(UnexpectedValueException::class);
Expand Down

0 comments on commit f6ab2bf

Please sign in to comment.