summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/uniconv/u-conv-to-enc.h15
-rw-r--r--lib/uniconv/u8-conv-from-enc.c4
-rw-r--r--lib/uniconv/u8-conv-to-enc.c4
-rw-r--r--lib/unilbrk/ulc-possible-linebreaks.c6
-rw-r--r--lib/unilbrk/ulc-width-linebreaks.c7
-rw-r--r--lib/unistr/u-cpy-alloc.h4
-rw-r--r--lib/uniwbrk/ulc-wordbreaks.c4
7 files changed, 22 insertions, 22 deletions
diff --git a/lib/uniconv/u-conv-to-enc.h b/lib/uniconv/u-conv-to-enc.h
index 68ff81484b..144ea40171 100644
--- a/lib/uniconv/u-conv-to-enc.h
+++ b/lib/uniconv/u-conv-to-enc.h
@@ -1,5 +1,5 @@
/* Conversion from UTF-16/UTF-32 to legacy encodings.
- Copyright (C) 2002, 2006-2008 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006-2009 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published
@@ -25,7 +25,7 @@ FUNC (const char *tocode,
size_t *scaled_offsets;
int retval;
- if (offsets != NULL)
+ if (offsets != NULL && srclen > 0)
{
scaled_offsets =
(size_t *) malloc (srclen * sizeof (UNIT) * sizeof (size_t));
@@ -70,7 +70,7 @@ FUNC (const char *tocode,
return -1;
utf8_srclen = tmpbufsize;
- if (offsets != NULL)
+ if (offsets != NULL && utf8_srclen > 0)
{
scaled_offsets = (size_t *) malloc (utf8_srclen * sizeof (size_t));
if (scaled_offsets == NULL)
@@ -88,12 +88,11 @@ FUNC (const char *tocode,
scaled_offsets, resultp, lengthp);
if (retval < 0)
{
+ int saved_errno = errno;
+ free (scaled_offsets);
if (utf8_src != tmpbuf)
- {
- int saved_errno = errno;
- free (utf8_src);
- errno = saved_errno;
- }
+ free (utf8_src);
+ errno = saved_errno;
return -1;
}
if (offsets != NULL)
diff --git a/lib/uniconv/u8-conv-from-enc.c b/lib/uniconv/u8-conv-from-enc.c
index bcd0cd081f..09eba1e519 100644
--- a/lib/uniconv/u8-conv-from-enc.c
+++ b/lib/uniconv/u8-conv-from-enc.c
@@ -1,5 +1,5 @@
/* Conversion to UTF-8 from legacy encodings.
- Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006-2007, 2009 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published
@@ -65,7 +65,7 @@ u8_conv_from_encoding (const char *fromcode,
}
/* Memory allocation. */
- if (*resultp != NULL && *lengthp >= srclen)
+ if ((*resultp != NULL && *lengthp >= srclen) || srclen == 0)
result = *resultp;
else
{
diff --git a/lib/uniconv/u8-conv-to-enc.c b/lib/uniconv/u8-conv-to-enc.c
index bc2cc09c93..85404d4be9 100644
--- a/lib/uniconv/u8-conv-to-enc.c
+++ b/lib/uniconv/u8-conv-to-enc.c
@@ -1,5 +1,5 @@
/* Conversion from UTF-8 to legacy encodings.
- Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006-2007, 2009 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published
@@ -50,7 +50,7 @@ u8_conv_to_encoding (const char *tocode,
#endif
/* Memory allocation. */
- if (*resultp != NULL && *lengthp >= srclen)
+ if ((*resultp != NULL && *lengthp >= srclen) || srclen == 0)
result = *resultp;
else
{
diff --git a/lib/unilbrk/ulc-possible-linebreaks.c b/lib/unilbrk/ulc-possible-linebreaks.c
index 74cd42a671..2032154d0e 100644
--- a/lib/unilbrk/ulc-possible-linebreaks.c
+++ b/lib/unilbrk/ulc-possible-linebreaks.c
@@ -1,5 +1,5 @@
/* Line breaking of strings.
- Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc.
+ Copyright (C) 2001-2003, 2006-2009 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2001.
This program is free software: you can redistribute it and/or modify it
@@ -62,9 +62,9 @@ ulc_possible_linebreaks (const char *s, size_t n, const char *encoding,
s, n, offsets, &t, &m)
== 0)
{
- char *q = (char *) malloc (m);
+ char *q = (char *) (m > 0 ? malloc (m) : NULL);
- if (q != NULL)
+ if (m == 0 || q != NULL)
{
size_t i;
diff --git a/lib/unilbrk/ulc-width-linebreaks.c b/lib/unilbrk/ulc-width-linebreaks.c
index 5340a4deb5..71354aeca8 100644
--- a/lib/unilbrk/ulc-width-linebreaks.c
+++ b/lib/unilbrk/ulc-width-linebreaks.c
@@ -1,5 +1,5 @@
/* Line breaking of strings.
- Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc.
+ Copyright (C) 2001-2003, 2006-2009 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2001.
This program is free software: you can redistribute it and/or modify it
@@ -64,9 +64,10 @@ ulc_width_linebreaks (const char *s, size_t n,
s, n, offsets, &t, &m)
== 0)
{
- char *memory = (char *) malloc (m + (o != NULL ? m : 0));
+ char *memory =
+ (char *) (m > 0 ? malloc (m + (o != NULL ? m : 0)) : NULL);
- if (memory != NULL)
+ if (m == 0 || memory != NULL)
{
char *q = (char *) memory;
char *o8 = (o != NULL ? (char *) (q + m) : NULL);
diff --git a/lib/unistr/u-cpy-alloc.h b/lib/unistr/u-cpy-alloc.h
index 7e18a189dd..dace3e2e66 100644
--- a/lib/unistr/u-cpy-alloc.h
+++ b/lib/unistr/u-cpy-alloc.h
@@ -1,5 +1,5 @@
/* Copy piece of UTF-8/UTF-16/UTF-32 string.
- Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2002, 2006-2007, 2009 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2002.
This program is free software: you can redistribute it and/or modify it
@@ -23,7 +23,7 @@ FUNC (const UNIT *s, size_t n)
{
UNIT *dest;
- dest = (UNIT *) malloc (n * sizeof (UNIT));
+ dest = (UNIT *) malloc (n > 0 ? n * sizeof (UNIT) : 1);
if (dest != NULL)
{
#if 0
diff --git a/lib/uniwbrk/ulc-wordbreaks.c b/lib/uniwbrk/ulc-wordbreaks.c
index 85e4efd476..b97b13de2b 100644
--- a/lib/uniwbrk/ulc-wordbreaks.c
+++ b/lib/uniwbrk/ulc-wordbreaks.c
@@ -64,9 +64,9 @@ ulc_wordbreaks (const char *s, size_t n, char *p)
s, n, offsets, &t, &m)
== 0)
{
- char *q = (char *) malloc (m);
+ char *q = (char *) (m > 0 ? malloc (m) : NULL);
- if (q != NULL)
+ if (m == 0 || q != NULL)
{
size_t i;