libc/regex: r302824 added invalid check breaking collating ranges

Yuri Pankov yuripv at icloud.com
Tue Jan 23 08:41:38 UTC 2018


On Tue, Jan 23, 2018 at 03:53:19AM +0300, Yuri Pankov wrote:
> (CCing Kyle as he's working on regex at the moment and not because he
> broke something)
> 
> Hi,
> 
> r302284 added an invalid check which breaks collating ranges:
> 
> -if (table->__collate_load_error) {
> -    (void)REQUIRE((uch)start <= (uch)finish, REG_ERANGE);
> +if (table->__collate_load_error || MB_CUR_MAX > 1) {
> +    (void)REQUIRE(start <= finish, REG_ERANGE);
> 
> The "MB_CUR_MAX > 1" is wrong, we should be doing proper comparison
> according to current locale's collation and not simply comparing the
> wchar_t values.

After re-reading the specification I now see that what looked like a bug 
is actually an implementation choice, though the one that needs to be 
documentated.  I'll update the man page if anyone is willing to review 
(and commit) the changes.


More information about the freebsd-hackers mailing list