Re: /bin/ls formatting broken for non-C(?) locales

From: Baptiste Daroussin <bapt_at_freebsd.org>
Date: Wed, 25 Nov 2015 16:52:00 +0100
On Wed, Nov 25, 2015 at 06:31:16PM +0300, Andrey Chernov wrote:
> On 25.11.2015 18:12, Andrey Chernov wrote:
> > On 25.11.2015 17:35, Baptiste Daroussin wrote:
> >>> BTW, array size looks suspicious:
> >>> static wchar_t wab_months[12][MAX_ABMON_WIDTH * 2 * MB_LEN_MAX];
> >>> what MB_LEN_MAX doing here? This constant is for multiple-bytes encoded,
> >>> not for wide chars.
> >> Bad copy/paste sorry it should be "MAX_ABMON_WIDTH * 2"
> > 
> > I don't check deep enough, it seems first array
> > MAX_ABMON_WIDTH * MB_LEN_MAX + 1
> > and second one
> > MAX_ABMON_WIDTH * 2 + 1
> > 
> 
> No. We can't assume anything here and should integrate limits from the
> locale for months fields instead. F.e. in abstract general case in wide
> array can be 100 zero-width characters + 5 of normal characters, so
> width-oriented sizes not prevents overflowing.
> 
> First array size should be from locale internals,

There is no max size for an abbreviated month in the locale internals
So maybe the best here is to consider your first proposal:
MAX_ABMON_WIDTH * MB_LEN_MAX + 1 and MAX_ABMON_WIDTH * 2 + 1
Check that it does not overflow and fallack if it overflows.

Having 100 zero-width characters in a locale have very little probability to
happen and if it does one day, it problably means something went wrong in the
code generation

Bapt

Received on Wed Nov 25 2015 - 14:52:05 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:01 UTC