libc/regex: r302824 added invalid check breaking collating ranges
Kyle Evans
kevans at freebsd.org
Tue Jan 23 14:17:09 UTC 2018
On Mon, Jan 22, 2018 at 11:36 PM, Yuri Pankov <yuripv at icloud.com> wrote:
> 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.
Can you point to the section of specification that indicates this is
OK behavior? It doesn't seem desirable, but I see that GNU systems
will operate in the same manner that we do now.
More information about the freebsd-hackers
mailing list