[PATCH v2] locale: don't crash if locale-archive contains all zeros

Ondřej Bílka neleai@seznam.cz
Tue Dec 3 11:41:00 GMT 2013


On Tue, Dec 03, 2013 at 12:21:33PM +0100, Andreas Schwab wrote:
> Aurelien Jarno <aurelien@aurel32.net> writes:
> 
> > diff --git a/locale/loadarchive.c b/locale/loadarchive.c
> > index 70136dc..f723780 100644
> > --- a/locale/loadarchive.c
> > +++ b/locale/loadarchive.c
> > @@ -274,6 +274,10 @@ _nl_load_locale_from_archive (int category, const char **namep)
> >    namehashtab = (struct namehashent *) ((char *) head
> >  					+ head->namehash_offset);
> >  
> > +  /* Avoid division by 0 if the file is corrupted.  */
> > +  if (__glibc_unlikely (head->namehash_size == 0))
> > +    goto close_and_out;
> > +
> >    idx = hval % head->namehash_size;
> >    incr = 1 + hval % (head->namehash_size - 2);
> 
> That won't help for head->namehash_size == 2, or any other corruptions.
> 
Which is less common zeroed file. Proper solution would be starting
files with magic constant which is too late to add.

Do you have idea to detect corruption other than changing check to

head->namehash_size == 0 || head->namehash_size == 2



More information about the Libc-alpha mailing list