diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | locale/programs/ld-collate.c | 4 |
3 files changed, 15 insertions, 3 deletions
@@ -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. @@ -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 diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c index d88a6de56e..f7ae09792a 100644 --- a/locale/programs/ld-collate.c +++ b/locale/programs/ld-collate.c @@ -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); |