mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-27 19:53:32 +08:00
Fix localedef collation handling of <U0000> (bug 15948).
This commit is contained in:
parent
c7738d0822
commit
5abe068233
@ -1,3 +1,11 @@
|
||||
2013-10-18 Richard Sandiford <richard@codesourcery.com>
|
||||
Joseph Myers <joseph@codesourcery.com
|
||||
|
||||
[BZ #15948]
|
||||
* locale/programs/ld-collate.c (new_element): Handle <U0000> as a
|
||||
single character.
|
||||
(add_to_tablewc): Assert sequence of wide characters is nonempty.
|
||||
|
||||
2013-10-18 Siddhesh Poyarekar <siddhesh@redhat.com>
|
||||
|
||||
* elf/tst-tls-dlinfo.c: Don't include tls.h.
|
||||
|
6
NEWS
6
NEWS
@ -14,9 +14,9 @@ Version 2.19
|
||||
15609, 15610, 15632, 15640, 15672, 15680, 15681, 15723, 15734, 15735,
|
||||
15736, 15748, 15749, 15754, 15760, 15764, 15797, 15844, 15847, 15849,
|
||||
15855, 15856, 15857, 15859, 15867, 15886, 15887, 15890, 15892, 15893,
|
||||
15895, 15897, 15905, 15909, 15919, 15921, 15923, 15939, 15963, 15966,
|
||||
15895, 15897, 15905, 15909, 15919, 15921, 15923, 15939, 15963, 15966,
|
||||
15988, 16032, 16034, 16036, 16041.
|
||||
15895, 15897, 15905, 15909, 15919, 15921, 15923, 15939, 15948, 15963,
|
||||
15966, 15895, 15897, 15905, 15909, 15919, 15921, 15923, 15939, 15963,
|
||||
15966, 15988, 16032, 16034, 16036, 16041.
|
||||
|
||||
* CVE-2012-4412 The strcoll implementation caches indices and rules for
|
||||
large collation sequences to optimize multiple passes. This cache
|
||||
|
@ -352,6 +352,9 @@ new_element (struct locale_collate_t *collate, const char *mbs, size_t mbslen,
|
||||
{
|
||||
size_t nwcs = wcslen ((wchar_t *) wcs);
|
||||
uint32_t zero = 0;
|
||||
/* Handle <U0000> as a single character. */
|
||||
if (nwcs == 0)
|
||||
nwcs = 1;
|
||||
obstack_grow (&collate->mempool, wcs, nwcs * sizeof (uint32_t));
|
||||
obstack_grow (&collate->mempool, &zero, sizeof (uint32_t));
|
||||
newp->wcs = (uint32_t *) obstack_finish (&collate->mempool);
|
||||
@ -2078,6 +2081,7 @@ add_to_tablewc (uint32_t ch, struct element_t *runp)
|
||||
weightidx = output_weightwc (atwc.weightpool, atwc.collate,
|
||||
runp);
|
||||
|
||||
assert (runp->nwcs > 0);
|
||||
added = (1 + 1 + runp->nwcs - 1) * sizeof (int32_t);
|
||||
if (sizeof (int) == sizeof (int32_t))
|
||||
obstack_make_room (atwc.extrapool, added);
|
||||
|
Loading…
Reference in New Issue
Block a user