regex: fix character class repetitions
authorSzabolcs Nagy <nsz@port70.net>
Wed, 25 Mar 2015 18:25:09 +0000 (18:25 +0000)
committerRich Felker <dalias@aerifal.cx>
Mon, 30 Mar 2015 06:19:58 +0000 (02:19 -0400)
commit39e65294a4bf06e7dda676945bf3a6f73075ad47
tree01772f2d41d541012b466bd28b6c5caf85fa6962
parentf0a5b139ef357858f06d70c7aac9bbe590114849
regex: fix character class repetitions

Internally regcomp needs to copy some iteration nodes before
translating the AST into TNFA representation.

Literal nodes were not copied correctly: the class type and list
of negated class types were not copied so classes were ignored
(in the non-negated case an ignored char class caused the literal
to match everything).

This affects iterations when the upper bound is finite, larger
than one or the lower bound is larger than one. So eg. the EREs

 [[:digit:]]{2}
 [^[:space:]ab]{1,4}

were treated as

 .{2}
 [^ab]{1,4}

The fix is done with minimal source modification to copy the
necessary fields, but the AST preparation and node handling
code of tre will need to be cleaned up for clarity.

(cherry picked from commit c498efe117539a9d40d90b588c033316701c4b3e)
src/regex/regcomp.c