Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost.Regex 1.39.0: Crash in boost::sub_match::str()
From: Anthony Foglia (AFoglia_at_[hidden])
Date: 2009-05-15 11:13:02


Peter Klotz wrote:
> The program below crashes when compiled and executed in Windows using MSVC8.
>
> The crash happens in boost::sub_match::str(). It seems that the internal structure m_subs gets somehow corrupted.
>
> The crash disappears when passing the const reference fileName instead of it->path().filename(). I have no idea why this should make any difference.

Regex does not keep a copy of the string, but instead uses the passed in
string. The result of the filename method is going out of scope
immediately after the regex_match call, and the memory in match.str() is
invalid.

Binding the temporary to a const reference keeps the string valid
through the iteration of the loop.

See https://svn.boost.org/trac/boost/ticket/1749 and
http://herbsutter.wordpress.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/

-- 
Anthony Foglia
Princeton Consultants
(609) 987-8787 x233

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net