Opened 15 years ago

Closed 15 years ago

#1749 closed Bugs (invalid)

regex_match on filesystem iterator.leaf () leads to strange results in what[]

Reported by: christopher.lang@… Owned by: John Maddock
Milestone: Component: regex
Version: Severity: Problem
Keywords: filesystem path iterator Cc:

Description

Code fragment:

boost::smatch what;
boost::regex e ("^(tty:)(tty.+)$");

for (fs::directory_iterator itr_l2 (*itr_l1); itr_l2 != end_itr; ++itr_l2) {
...
match = boost::regex_match ((*itr_l2).leaf(), what, e);

leads to incorrect results in what[0], what[1]... when match occurs.

libboost_filesystem.so.1.33.1 libboost_regex.so.1.33.1 Suse 10.1

Change History (1)

comment:1 by John Maddock, 15 years ago

Resolution: invalid
Status: newclosed

The problem here is that the leaf() function returns a *temporary string value*, so by the time that regex_match returns the string matched against has gone out of scope, and the iterators stored in match_results<> have all been invalidated. Assigning the result of leaf() to a local string object before calling regex_match will fix this.

HTH, John Maddock.

Note: See TracTickets for help on using tickets.