[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
striconveh: fix bug with empty return values
From: |
Bruno Haible |
Subject: |
striconveh: fix bug with empty return values |
Date: |
Sun, 30 Mar 2008 17:48:32 +0100 |
User-agent: |
KMail/1.5.4 |
On OSF/1 (and possibly other platforms whose malloc(0) can be NULL), the
mem_cd_iconveh function could return a NULL string rather than a "freshly
allocated memory block".
It showed up as a unit test failure on OSF/1.
2008-03-30 Bruno Haible <address@hidden>
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.
*** lib/striconveh.c.orig 2008-03-30 18:38:20.000000000 +0200
--- lib/striconveh.c 2008-03-30 18:37:46.000000000 +0200
***************
*** 1,5 ****
/* Character set conversion with error handling.
! Copyright (C) 2001-2007 Free Software Foundation, Inc.
Written by Bruno Haible and Simon Josefsson.
This program is free software: you can redistribute it and/or modify
--- 1,5 ----
/* Character set conversion with error handling.
! 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,878 ****
/* Now the final memory allocation. */
if (result == tmpbuf)
{
char *memory;
! memory = (char *) malloc (length + extra_alloc);
if (memory != NULL)
{
memcpy (memory, tmpbuf, length);
--- 870,879 ----
/* Now the final memory allocation. */
if (result == tmpbuf)
{
+ size_t memsize = length + extra_alloc;
char *memory;
! memory = (char *) malloc (memsize > 0 ? memsize : 1);
if (memory != NULL)
{
memcpy (memory, tmpbuf, length);
***************
*** 887,895 ****
else if (result != *resultp && length + extra_alloc < allocated)
{
/* Shrink the allocated memory if possible. */
char *memory;
! memory = (char *) realloc (result, length + extra_alloc);
if (memory != NULL)
result = memory;
}
--- 888,897 ----
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, memsize > 0 ? memsize : 1);
if (memory != NULL)
result = memory;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- striconveh: fix bug with empty return values,
Bruno Haible <=