From 53ddc721f3a7aa950d6503f51bfcb4314612d9b9 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 30 Mar 2008 18:48:14 +0200 Subject: [PATCH] Avoid failure when attempting to return empty iconv results on some platforms. --- ChangeLog | 7 +++++++ lib/striconveh.c | 8 +++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3388d16659..76a695ff20 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-03-30 Bruno Haible + + Avoid failure when attempting to return empty iconv results on some + platforms. + * lib/striconveh.c (mem_cd_iconveh_internal): In the final memory + allocation, don't report ENOMEM when the resulting string is empty. + 2008-03-30 Bruno Haible Fix buffer overrun. diff --git a/lib/striconveh.c b/lib/striconveh.c index 99bbe18d29..761f3b115b 100644 --- a/lib/striconveh.c +++ b/lib/striconveh.c @@ -1,5 +1,5 @@ /* Character set conversion with error handling. - Copyright (C) 2001-2007 Free Software Foundation, Inc. + Copyright (C) 2001-2008 Free Software Foundation, Inc. Written by Bruno Haible and Simon Josefsson. This program is free software: you can redistribute it and/or modify @@ -870,9 +870,10 @@ mem_cd_iconveh_internal (const char *src, size_t srclen, /* Now the final memory allocation. */ if (result == tmpbuf) { + size_t memsize = length + extra_alloc; char *memory; - memory = (char *) malloc (length + extra_alloc); + memory = (char *) malloc (memsize > 0 ? memsize : 1); if (memory != NULL) { memcpy (memory, tmpbuf, length); @@ -887,9 +888,10 @@ mem_cd_iconveh_internal (const char *src, size_t srclen, else if (result != *resultp && length + extra_alloc < allocated) { /* Shrink the allocated memory if possible. */ + size_t memsize = length + extra_alloc; char *memory; - memory = (char *) realloc (result, length + extra_alloc); + memory = (char *) realloc (result, memsize > 0 ? memsize : 1); if (memory != NULL) result = memory; } -- 2.30.2