changeset 9835:69955b112e2e

Avoid failure when attempting to return empty iconv results on some platforms.
author Bruno Haible <bruno@clisp.org>
date Sun, 30 Mar 2008 18:48:14 +0200
parents b4f1e5627265
children 69507e40ea4f
files ChangeLog lib/striconveh.c
diffstat 2 files changed, 12 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-03-30  Bruno Haible  <bruno@clisp.org>
+
+	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  <bruno@clisp.org>
 
 	Fix buffer overrun.
--- 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 @@
   /* 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 @@
   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;
     }