regex(3): Handle invalid {} constructs consistently and adjust tests
authorkevans <kevans@FreeBSD.org>
Tue, 8 Aug 2017 04:10:46 +0000 (04:10 +0000)
committerkevans <kevans@FreeBSD.org>
Tue, 8 Aug 2017 04:10:46 +0000 (04:10 +0000)
commit39d016e70fde91c131d5276cce9b4bbd4ee71259
tree1b24bca4f3c80ca10e9b83f538ff244a2880f8a1
parentc20505134f5140478ef7cfe6252cc904a06e1289
regex(3): Handle invalid {} constructs consistently and adjust tests

Currently, regex(3) exhibits the following wrong behavior as demonstrated
with sed:

 - echo "a{1,2,3}b" | sed -r "s/{/_/"     (1)
 - echo "a{1,2,3}b" | sed "s/\}/_/"       (2)
 - echo "a{1,2,3}b" | sed -r "s/{}/_/"    (3)

Cases (1) and (3) should throw errors but they actually succeed, and (2)
throws an error when it should match the literal '}'. The correct behavior
was decided by comparing to the behavior with the equivalent BRE (1)(3) or
ERE (2) and consulting POSIX, along with some reasonable evaluation.

Tests were also adjusted/added accordingly.

PR: 166861
Reviewed by: emaste, ngie, pfg
Approved by: emaste (mentor)
MFC after: never
Differential Revision: https://reviews.freebsd.org/D10315
contrib/netbsd-tests/lib/libc/regex/data/repet_bounded.in
contrib/netbsd-tests/lib/libc/regex/data/repet_multi.in
lib/libc/regex/regcomp.c