Make parse fail if fmt string is not completely consumed.

This commit is contained in:
Howard Hinnant 2017-04-18 12:02:21 -04:00
parent c64d69b1e1
commit 2f8997d3ed
2 changed files with 15 additions and 3 deletions

5
date.h
View File

@ -5367,9 +5367,8 @@ read(std::basic_istream<CharT, Traits>& is, CharT a0, Args&& ...args)
if (a0 != CharT{})
{
auto ic = is.peek();
if (Traits::eq_int_type(ic, Traits::eof()))
return;
if (!Traits::eq(Traits::to_char_type(ic), a0))
if (Traits::eq_int_type(ic, Traits::eof()) ||
!Traits::eq(Traits::to_char_type(ic), a0))
{
is.setstate(std::ios::failbit);
return;

View File

@ -716,6 +716,18 @@ test_Z()
}
}
void
test_trailing_Z()
{
std::string format = "%FT%TZ";
std::string datetime = "2017-2-15T13:13:13";
std::istringstream input(datetime);
date::sys_seconds tp;
input >> date::parse(format, tp);
assert(input.fail());
assert(input.eof());
}
int
main()
{
@ -743,4 +755,5 @@ main()
test_X();
test_z();
test_Z();
test_trailing_Z();
}