HomeFreeBSD

regex: mixed sets are misidentified as singletons

Description

regex: mixed sets are misidentified as singletons

Fix "singleton" function used by regcomp() to turn character set matches
into exact character matches if a character set has exactly one
element.

The underlying cset representation is complex; most critically it
records"small" characters (codepoint less than either 128
or 256 depending on locale) in a bit vector, and "wide" characters in
a secondary array.

Unfortunately the "singleton" function uses to identify singleton sets
treated a cset as a singleton if either the "small" or the "wide" sets
had exactly one element (it would then ignore the other set).

The easiest way to demonstrate this bug:

$ export LANG=C.UTF-8
$ echo 'a' | grep '[abĂ ]'

It should match (and print "a") but instead it doesn't match because the
single accented character in the set is misinterpreted as a singleton.

Reviewed by: kevans, yuripv
Obtained from: illumos
Differential Revision: https://reviews.freebsd.org/D43149

Details

Provenance
Bill Sommerfeld <sommerfeld@hamachi.org>Authored on Dec 21 2023, 3:46 AM
yuripvCommitted on Dec 22 2023, 5:19 AM
Reviewer
kevans
Differential Revision
D43149: regex: mixed sets are misidentified as singletons
Parents
rG488e8a7faca5: LinuxKPI: reduce impact of large MAXCPU
Branches
Unknown
Tags
Unknown