summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--lib/unistr.in.h18
-rw-r--r--lib/unistr/u16-uctomb-aux.c2
-rw-r--r--lib/unistr/u16-uctomb.c2
-rw-r--r--lib/unistr/u32-uctomb.c2
-rw-r--r--lib/unistr/u8-uctomb-aux.c2
-rw-r--r--lib/unistr/u8-uctomb.c2
7 files changed, 25 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 92320c5c96..0d50b68411 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2020-09-05 Bruno Haible <bruno@clisp.org>
+
+ unistr/u{8,16,32}-uctomb: Avoid possible trouble with huge strings.
+ * lib/unistr.in.h (u8_uctomb_aux, u8_uctomb, u16_uctomb_aux, u16_uctomb,
+ u32_uctomb): Change type of last argument to ptrdiff_t.
+ * lib/unistr/u8-uctomb.c (u8_uctomb): Likewise.
+ * lib/unistr/u8-uctomb-aux.c (u8_uctomb_aux): Likewise.
+ * lib/unistr/u16-uctomb.c (u16_uctomb): Likewise.
+ * lib/unistr/u16-uctomb-aux.c (u16_uctomb_aux): Likewise.
+ * lib/unistr/u32-uctomb.c (u32_uctomb): Likewise.
+
2020-09-01 Paul Eggert <eggert@cs.ucla.edu>
manywarnings: remove -Wchkp and -Wabi from C++ too
diff --git a/lib/unistr.in.h b/lib/unistr.in.h
index 0acfae63fc..a0fe3db374 100644
--- a/lib/unistr.in.h
+++ b/lib/unistr.in.h
@@ -25,7 +25,7 @@
/* Get bool. */
#include <stdbool.h>
-/* Get size_t. */
+/* Get size_t, ptrdiff_t. */
#include <stddef.h>
#ifdef __cplusplus
@@ -305,13 +305,13 @@ extern int
#if GNULIB_UNISTR_U8_UCTOMB || HAVE_LIBUNISTRING
/* Auxiliary function, also used by u8_chr, u8_strchr, u8_strrchr. */
extern int
- u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n);
+ u8_uctomb_aux (uint8_t *s, ucs4_t uc, ptrdiff_t n);
# if !HAVE_INLINE
extern int
- u8_uctomb (uint8_t *s, ucs4_t uc, int n);
+ u8_uctomb (uint8_t *s, ucs4_t uc, ptrdiff_t n);
# else
static inline int
-u8_uctomb (uint8_t *s, ucs4_t uc, int n)
+u8_uctomb (uint8_t *s, ucs4_t uc, ptrdiff_t n)
{
if (uc < 0x80 && n > 0)
{
@@ -327,13 +327,13 @@ u8_uctomb (uint8_t *s, ucs4_t uc, int n)
#if GNULIB_UNISTR_U16_UCTOMB || HAVE_LIBUNISTRING
/* Auxiliary function, also used by u16_chr, u16_strchr, u16_strrchr. */
extern int
- u16_uctomb_aux (uint16_t *s, ucs4_t uc, int n);
+ u16_uctomb_aux (uint16_t *s, ucs4_t uc, ptrdiff_t n);
# if !HAVE_INLINE
extern int
- u16_uctomb (uint16_t *s, ucs4_t uc, int n);
+ u16_uctomb (uint16_t *s, ucs4_t uc, ptrdiff_t n);
# else
static inline int
-u16_uctomb (uint16_t *s, ucs4_t uc, int n)
+u16_uctomb (uint16_t *s, ucs4_t uc, ptrdiff_t n)
{
if (uc < 0xd800 && n > 0)
{
@@ -349,10 +349,10 @@ u16_uctomb (uint16_t *s, ucs4_t uc, int n)
#if GNULIB_UNISTR_U32_UCTOMB || HAVE_LIBUNISTRING
# if !HAVE_INLINE
extern int
- u32_uctomb (uint32_t *s, ucs4_t uc, int n);
+ u32_uctomb (uint32_t *s, ucs4_t uc, ptrdiff_t n);
# else
static inline int
-u32_uctomb (uint32_t *s, ucs4_t uc, int n)
+u32_uctomb (uint32_t *s, ucs4_t uc, ptrdiff_t n)
{
if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000))
{
diff --git a/lib/unistr/u16-uctomb-aux.c b/lib/unistr/u16-uctomb-aux.c
index a136b0a348..44fbdd5b3d 100644
--- a/lib/unistr/u16-uctomb-aux.c
+++ b/lib/unistr/u16-uctomb-aux.c
@@ -21,7 +21,7 @@
#include "unistr.h"
int
-u16_uctomb_aux (uint16_t *s, ucs4_t uc, int n)
+u16_uctomb_aux (uint16_t *s, ucs4_t uc, ptrdiff_t n)
{
if (uc < 0xd800)
{
diff --git a/lib/unistr/u16-uctomb.c b/lib/unistr/u16-uctomb.c
index b4f2b88ed1..77e52e5b83 100644
--- a/lib/unistr/u16-uctomb.c
+++ b/lib/unistr/u16-uctomb.c
@@ -28,7 +28,7 @@
#if !HAVE_INLINE
int
-u16_uctomb (uint16_t *s, ucs4_t uc, int n)
+u16_uctomb (uint16_t *s, ucs4_t uc, ptrdiff_t n)
{
if (uc < 0xd800)
{
diff --git a/lib/unistr/u32-uctomb.c b/lib/unistr/u32-uctomb.c
index 53e835d189..73554f1dc6 100644
--- a/lib/unistr/u32-uctomb.c
+++ b/lib/unistr/u32-uctomb.c
@@ -28,7 +28,7 @@
#if !HAVE_INLINE
int
-u32_uctomb (uint32_t *s, ucs4_t uc, int n)
+u32_uctomb (uint32_t *s, ucs4_t uc, ptrdiff_t n)
{
if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000))
{
diff --git a/lib/unistr/u8-uctomb-aux.c b/lib/unistr/u8-uctomb-aux.c
index 0b5ec90642..4e66c95073 100644
--- a/lib/unistr/u8-uctomb-aux.c
+++ b/lib/unistr/u8-uctomb-aux.c
@@ -23,7 +23,7 @@
#include "attribute.h"
int
-u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n)
+u8_uctomb_aux (uint8_t *s, ucs4_t uc, ptrdiff_t n)
{
int count;
diff --git a/lib/unistr/u8-uctomb.c b/lib/unistr/u8-uctomb.c
index 7cf3389632..395be77254 100644
--- a/lib/unistr/u8-uctomb.c
+++ b/lib/unistr/u8-uctomb.c
@@ -30,7 +30,7 @@
#if !HAVE_INLINE
int
-u8_uctomb (uint8_t *s, ucs4_t uc, int n)
+u8_uctomb (uint8_t *s, ucs4_t uc, ptrdiff_t n)
{
if (uc < 0x80)
{