From 9bace01559354af9c9ce205a9db41021346b832d Mon Sep 17 00:00:00 2001 From: Love Hornquist Astrand Date: Thu, 24 Sep 2009 07:32:35 -0700 Subject: [PATCH] Check for malloc(0) to make AIX happy Prompted by [HEIMDAL-646] by Anton Lundin --- lib/wind/idn-lookup.c | 4 +++- lib/wind/normalize.c | 5 +++++ lib/wind/stringprep.c | 8 +++++++- lib/wind/test-map.c | 2 +- lib/wind/test-normalize.c | 2 +- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/wind/idn-lookup.c b/lib/wind/idn-lookup.c index 7c1b046bf..1bc63a33d 100644 --- a/lib/wind/idn-lookup.c +++ b/lib/wind/idn-lookup.c @@ -73,7 +73,9 @@ lookup(const char *name) size_t norm_len = u_len * 2; uint32_t *norm = malloc(norm_len * sizeof(uint32_t)); - if (u == NULL || norm == NULL) + if (u == NULL && u_len != 0) + errx(1, "malloc failed"); + if (norm == NULL && norm_len != 0) errx(1, "malloc failed"); ret = wind_utf8ucs4(name, u, &u_len); diff --git a/lib/wind/normalize.c b/lib/wind/normalize.c index 4c70a5293..60746bf96 100644 --- a/lib/wind/normalize.c +++ b/lib/wind/normalize.c @@ -280,6 +280,11 @@ _wind_stringprep_normalize(const uint32_t *in, size_t in_len, uint32_t *tmp; int ret; + if (in_len == 0) { + *out_len = 0; + return 0; + } + tmp_len = in_len * 4; if (tmp_len < MAX_LENGTH_CANON) tmp_len = MAX_LENGTH_CANON; diff --git a/lib/wind/stringprep.c b/lib/wind/stringprep.c index a991f20cf..ec4657665 100644 --- a/lib/wind/stringprep.c +++ b/lib/wind/stringprep.c @@ -58,10 +58,16 @@ wind_stringprep(const uint32_t *in, size_t in_len, wind_profile_flags flags) { size_t tmp_len = in_len * 3; - uint32_t *tmp = malloc(tmp_len * sizeof(uint32_t)); + uint32_t *tmp; int ret; size_t olen; + if (in_len == 0) { + *out_len = 0; + return 0; + } + + tmp = malloc(tmp_len * sizeof(uint32_t)); if (tmp == NULL) return ENOMEM; diff --git a/lib/wind/test-map.c b/lib/wind/test-map.c index 475d0c5dc..5b0f49381 100644 --- a/lib/wind/test-map.c +++ b/lib/wind/test-map.c @@ -64,7 +64,7 @@ try(const struct example *c) int ret; size_t out_len = c->out_len; uint32_t *tmp = malloc(out_len * sizeof(uint32_t)); - if (tmp == NULL) + if (tmp == NULL && out_len != 0) err(1, "malloc"); ret = _wind_stringprep_map(c->in, c->in_len, tmp, &out_len, WIND_PROFILE_NAME); if (ret) { diff --git a/lib/wind/test-normalize.c b/lib/wind/test-normalize.c index c63706a97..9daa30b10 100644 --- a/lib/wind/test-normalize.c +++ b/lib/wind/test-normalize.c @@ -101,7 +101,7 @@ test(char *buf) norm_len = MAX_LENGTH_CANON; tmp = malloc(norm_len * sizeof(size_t)); - if (tmp == NULL) + if (tmp == NULL && norm_len != 0) err(1, "malloc"); ret = _wind_stringprep_normalize(in, in_len, tmp, &norm_len); if (ret) {