Opened 14 years ago
Closed 12 years ago
#2777 closed Bugs (fixed)
find_format_all calls formatter with invalid match
| Reported by: | Owned by: | Pavol Droba | |
|---|---|---|---|
| Milestone: | Boost 1.39.0 | Component: | string_algo |
| Version: | Boost 1.35.0 | Severity: | Problem |
| Keywords: | Cc: |
Description
find_format_all() calls the formatter with an invalid match when the end of the input is reached.
Example:
// A Boost.StringAlgo Formatter expecting
// to be called with matches to the regex:
// (\d+\.)(\d+)
struct NextVersionNumber {
template<class RegexMatchT>
std::string operator()(const RegexMatchT& M)const
{
// Without this check, we end up with
// a bad_lexical_cast exception,
// because operator() ends up being called twice:
// First with a good match, and then with an emtpy one
if (!Match){
return "";
}
using boost::lexical_cast;
return M.match_results()[1] +
lexical_cast<std::string>(
lexical_cast<unsigned int>(M.match_results()[2]) + 1
);
}
};
int main()
{
namespace bsa = boost::algorithm;
const std::string s("version is 1.0");
// Outputs:
// version is: 1.1
std::cout <<
bsa::find_format_all_copy(
s, bsa::regex_finder(boost::regex("(\\d+\\.)(\\d+)")),
NextVersionNumber()
);
return 0;
}
Change History (2)
comment:1 by , 14 years ago
| Status: | new → assigned |
|---|
comment:2 by , 12 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
Note:
See TracTickets
for help on using tickets.

(In [62695]) Avoid calling the formatter with an invalid match. Fixes #2777