From 844a4da8483610b921cb017679848ceaf47a7b2e Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Mon, 12 Mar 2012 13:15:48 +0100 Subject: [PATCH] uninorm: Don't crash in out-of-memory conditions. * lib/uninorm/u-normalize-internal.h (FUNC): Handle malloc() failure gracefully. * lib/uninorm/uninorm-filter.c (uninorm_filter_write): Likewise. Based on a report and patch by Stephen Gallagher . --- ChangeLog | 8 ++++++++ lib/uninorm/u-normalize-internal.h | 5 +++++ lib/uninorm/uninorm-filter.c | 6 ++++++ 3 files changed, 19 insertions(+) diff --git a/ChangeLog b/ChangeLog index 82507977d..7d09ceffd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2012-03-12 Bruno Haible + + uninorm: Don't crash in out-of-memory conditions. + * lib/uninorm/u-normalize-internal.h (FUNC): Handle malloc() failure + gracefully. + * lib/uninorm/uninorm-filter.c (uninorm_filter_write): Likewise. + Based on a report and patch by Stephen Gallagher . + 2012-03-13 Akim Demaille quote: fix syntax-check diff --git a/lib/uninorm/u-normalize-internal.h b/lib/uninorm/u-normalize-internal.h index e21243fe5..bb54b3004 100644 --- a/lib/uninorm/u-normalize-internal.h +++ b/lib/uninorm/u-normalize-internal.h @@ -310,6 +310,11 @@ FUNC (uninorm_t nf, const UNIT *s, size_t n, abort (); new_sortbuf = (struct ucs4_with_ccc *) malloc (2 * sortbuf_allocated * sizeof (struct ucs4_with_ccc)); + if (new_sortbuf == NULL) + { + errno = ENOMEM; + goto fail; + } memcpy (new_sortbuf, sortbuf, sortbuf_count * sizeof (struct ucs4_with_ccc)); if (sortbuf != sortbuf_preallocated) diff --git a/lib/uninorm/uninorm-filter.c b/lib/uninorm/uninorm-filter.c index 3d991cbf0..e3b920539 100644 --- a/lib/uninorm/uninorm-filter.c +++ b/lib/uninorm/uninorm-filter.c @@ -241,6 +241,12 @@ uninorm_filter_write (struct uninorm_filter *filter, ucs4_t uc_arg) new_sortbuf = (struct ucs4_with_ccc *) malloc (2 * filter->sortbuf_allocated * sizeof (struct ucs4_with_ccc)); + if (new_sortbuf == NULL) + { + /* errno is ENOMEM. */ + filter->sortbuf_count = sortbuf_count; + return -1; + } memcpy (new_sortbuf, filter->sortbuf, sortbuf_count * sizeof (struct ucs4_with_ccc)); if (filter->sortbuf != filter->sortbuf_preallocated) -- 2.11.0