Opened 12 years ago

Closed 12 years ago

#4261 closed Bugs (duplicate)

bug? with boost::find_format_all, boost::regex_finder and custom regex formatter. I'm not sure.

Reported by: nic.bertrand@… Owned by: Pavol Droba
Milestone: Boost 1.43.0 Component: string_algo
Version: Boost 1.42.0 Severity: Problem
Keywords: regex, string, boost-regex, boost-string Cc:

Description

I have a code that has been working for almost 4 years (since boost 1.33) and today I went from boost 1.36 to boost 1.42 and now I have a problem.

I'm calling a custom formatter on a string to format parts of the string that match a REGEX.

For instance, a string like: "abc;def:" will be changed to "abc\2Cdef\3B" if the REGEX contains "([;:])"

boost::find_format_all( mystring, boost::regex_finder( REGEX ), custom_formatter() );

The custom formatter looks like this:

struct custom_formatter() {

template< typename T > std::string operator()( const T & s ) const {

std::string matchStr = s.match_results().str(1);

perform substitutions

return matchStr;

}

}

This worked fine but with boost 1.42 I now have "non initialized" s.match_results() which yield to boost::exception_detail::clone_implINS0_::error_info_injectorISt11logic_errorEEEE - Attempt to access an uninitialzed boost::match_results<> class.

This means that sometimes I am in the functor to format a string but there is no match. It seems I have a new empty match at the end of each string to parse.

Am I doing something wrong? Or is it normal to enter the functor when there is no match and I should check against something?

I can avoid this testing s.begin() == s.end() at the begining of the functor, but is it really necessary or is it a bug

Change History (4)

comment:1 by Steven Watanabe, 12 years ago

Component: Nonestring_algo
Owner: set to Pavol Droba

This sounds like a bug to me.

comment:2 by Éric Malenfant <eric.malenfant@…>, 12 years ago

This looks very much like Ticket #2777 :"find_format_all calls formatter with invalid match".

An interesting difference is that the present ticket reports that the problem was absent in Boost 1.36, while ticket #2777 is filed against Boost 1.35.

comment:3 by nic.bertrand@…, 12 years ago

I've test quickly with boost 1.39 and the bug is not present

comment:4 by Steven Watanabe, 12 years ago

Resolution: duplicate
Status: newclosed

Duplicates #2777.

Note: See TracTickets for help on using tickets.