Page MenuHomeFreeBSD

locale: persistent mbstates should be reset when rune locale changes
ClosedPublic

Authored by yuripv on Nov 1 2018, 9:30 AM.
Tags
None
Referenced Files
F132627126: D17796.id50189.diff
Sat, Oct 18, 1:39 PM
F132627125: D17796.id.diff
Sat, Oct 18, 1:39 PM
F132627124: D17796.id49866.diff
Sat, Oct 18, 1:39 PM
F132572590: D17796.diff
Sat, Oct 18, 2:14 AM
Unknown Object (File)
Thu, Oct 16, 4:34 AM
Unknown Object (File)
Fri, Sep 26, 1:07 AM
Unknown Object (File)
Fri, Sep 19, 10:56 AM
Unknown Object (File)
Sep 15 2025, 6:53 PM
Subscribers

Details

Summary

The test marked as expected to fail in /usr/tests/lib/libc/locale/mbrtowctest (https://github.com/freebsd/freebsd/blob/7bddbea75ccbb4c0d4a2ca5b0e8ce713a878b016/contrib/netbsd-tests/lib/libc/locale/t_mbrtowc.c#L242) seems to be showing a real issue -- when changing ctype component of locale, we can have a state that is perfectly normal for previous locale encoding, and is invalid for new one, leading to unexpected conversion failure. More so, when the locale encoding changes, the meaning of data in opaque structure __mbstate changes as well (every encoding seems to have its own structure). All this lead me to this change resetting the persistent mbstates when new rune locale data is loaded, which required moving the fields from struct _xlocale to its ctype component.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable