Add stricter checking for valid date time string

This commit is contained in:
Fred Cox 2018-09-15 14:25:16 +03:00
parent 253d0a683b
commit 4f06f1524d

View File

@ -76,6 +76,10 @@ class DateTimeToHtml5DateTimeLocalTransformer extends BaseDateTimeTransformer
return; return;
} }
if (!preg_match('/^(\d{4})-(\d{2})-(\d{2})[T ]\d{2}:\d{2}(?::\d{2})?$/', $dateTimeLocal, $matches)) {
throw new TransformationFailedException(sprintf('The date "%s" is not a valid date.', $dateTimeLocal));
}
try { try {
$dateTime = new \DateTime($dateTimeLocal, new \DateTimeZone($this->outputTimezone)); $dateTime = new \DateTime($dateTimeLocal, new \DateTimeZone($this->outputTimezone));
} catch (\Exception $e) { } catch (\Exception $e) {
@ -86,10 +90,8 @@ class DateTimeToHtml5DateTimeLocalTransformer extends BaseDateTimeTransformer
$dateTime->setTimezone(new \DateTimeZone($this->inputTimezone)); $dateTime->setTimezone(new \DateTimeZone($this->inputTimezone));
} }
if (preg_match('/(\d{4})-(\d{2})-(\d{2})/', $dateTimeLocal, $m)) { if (!checkdate($matches[2], $matches[3], $matches[1])) {
if (!checkdate($m[2], $m[3], $m[1])) { throw new TransformationFailedException(sprintf('The date "%s-%s-%s" is not a valid date.', $matches[1], $matches[2], $matches[3]));
throw new TransformationFailedException(sprintf('The date "%s-%s-%s" is not a valid date.', $m[1], $m[2], $m[3]));
}
} }
return $dateTime; return $dateTime;