Opened 18 years ago
Closed 18 years ago
#358 closed Bugs (Fixed)
parse_date asserts on empty string
| Reported by: | nobody | Owned by: | az_sw_dude |
|---|---|---|---|
| Milestone: | Component: | date_time | |
| Version: | None | Severity: | |
| Keywords: | Cc: |
Description
the following sample code fails with assert :
(Assertion failed: valid_, file
c:\dev\externallibs\boost_1_32_0\boost\token_iter
ator.hpp, line 57)
>>>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <iostream>
using namespace boost::gregorian;
int main( int, char** )
{
try
{
date d = from_simple_string( "" );
// never reached
std::cout << to_simple_string( d ) << std::endl;
}
catch( std::exception & )
{
// no std::exception caught !
}
return 0;
}
>>>
The error seems to be in date_time\date_parsing.hpp,
line 119 :
for(boost::tokenizer<>::iterator beg=tok.begin();
beg!=tok.end(), pos < spec_str.size(); ++beg, ++pos) {...
the comparison "beg!=tok.end()" has no effect because
the value of the expression is only determined by "pos
< spec_str.size()".
Therefore the string iteration goes beyond the end of
the string and...assert...
The function also fails if the given string is not a
complete date, ie: "2004", "2004-Jan"
I changed the "," to "&&" and it seems to perform
better (though i didn't run the boost regression tests).
I also checked the CVS repository to confirm the bug is
still there.
Have a nice day ! and thanks for this great library, it
is really good to develop with it.
Here is my email : guillaume.souchet@bnpparibas.com
Note:
See TracTickets
for help on using tickets.
