[BZ,#17596] mblen return code when n is zero

Message ID 1415890908-50691-1-git-send-email-raji@linux.vnet.ibm.com
State Superseded
Headers

Commit Message

Rajalakshmi S Nov. 13, 2014, 3:01 p.m. UTC
  This patch adds a check to return -1 when n is zero in mblen(),
mbrlen(),mbrtowc() and mbrtoc16().

	[BZ #17596]
	* wcsmbs/mbrtowc.c (__mbrtowc): Add check for n=0.
	* wcsmbs/mbrtoc16.c (mbrtoc16): Likewise.
---
 NEWS              | 2 +-
 wcsmbs/mbrtoc16.c | 2 ++
 wcsmbs/mbrtowc.c  | 2 ++
 3 files changed, 5 insertions(+), 1 deletion(-)
  

Comments

Andreas Schwab Nov. 13, 2014, 3:42 p.m. UTC | #1
Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com> writes:

> This patch adds a check to return -1 when n is zero in mblen(),
> mbrlen(),mbrtowc() and mbrtoc16().

A non-existing character is valid, no?  Certainly not an invalid
character sequence.

Andreas.
  
Paul Eggert Nov. 13, 2014, 4:07 p.m. UTC | #2
Andreas Schwab wrote:
> A non-existing character is valid, no?

Yes, mbrtowc should return (size_t) -2 when given an empty input buffer.
  

Patch

diff --git a/NEWS b/NEWS
index 918b4a1..67e7359 100644
--- a/NEWS
+++ b/NEWS
@@ -34,7 +34,7 @@  Version 2.20
   16966, 16967, 16977, 16978, 16984, 16990, 16996, 17009, 17022, 17031,
   17042, 17048, 17050, 17058, 17061, 17062, 17069, 17075, 17078, 17079,
   17084, 17086, 17088, 17092, 17097, 17125, 17135, 17137, 17150, 17153,
-  17187, 17213, 17259, 17261, 17262, 17263, 17319, 17325, 17354.
+  17187, 17213, 17259, 17261, 17262, 17263, 17319, 17325, 17354, 17596.
 
 * Optimized strchrnul implementation for AArch64.  Contributed by ARM Ltd.
 
diff --git a/wcsmbs/mbrtoc16.c b/wcsmbs/mbrtoc16.c
index 69105ba..2df1516 100644
--- a/wcsmbs/mbrtoc16.c
+++ b/wcsmbs/mbrtoc16.c
@@ -77,6 +77,8 @@  mbrtoc16 (char16_t *pc16, const char *s, size_t n, mbstate_t *ps)
       n = 1;
     }
 
+  if (n == 0)
+    goto ilseq;
   /* Tell where we want the result.  */
   data.__outbuf = outbuf;
   data.__outbufend = outbuf + sizeof (wchar_t);
diff --git a/wcsmbs/mbrtowc.c b/wcsmbs/mbrtowc.c
index 8070bd8..7e07cde 100644
--- a/wcsmbs/mbrtowc.c
+++ b/wcsmbs/mbrtowc.c
@@ -59,6 +59,8 @@  __mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
       n = 1;
     }
 
+  if (n == 0)
+    goto ilseq;
   /* Tell where we want the result.  */
   data.__outbuf = outbuf;
   data.__outbufend = outbuf + sizeof (wchar_t);