about summary refs log tree commit diff
path: root/wcsmbs/mbrtowc.c
diff options
context:
space:
mode:
Diffstat (limited to 'wcsmbs/mbrtowc.c')
-rw-r--r--wcsmbs/mbrtowc.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/wcsmbs/mbrtowc.c b/wcsmbs/mbrtowc.c
index 99bc5a4797..5a52b1dde1 100644
--- a/wcsmbs/mbrtowc.c
+++ b/wcsmbs/mbrtowc.c
@@ -28,7 +28,6 @@
 # define EILSEQ EINVAL
 #endif
 
-
 /* This is the private state used if PS is NULL.  */
 static mbstate_t state;
 
@@ -69,12 +68,15 @@ __mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
      characters.  The output buffer must be large enough, otherwise the
      definition of MB_CUR_MAX is not correct.  All the other possible
      errors also must not happen.  */
-  assert (status == GCONV_OK || status == GCONV_ILLEGAL_INPUT
-	  || status == GCONV_INCOMPLETE_INPUT);
+  assert (status == GCONV_OK || status == GCONV_EMPTY_INPUT
+	  || status == GCONV_ILLEGAL_INPUT
+	  || status == GCONV_INCOMPLETE_INPUT
+	  || status == GCONV_FULL_OUTPUT);
 
-  if (status == GCONV_OK)
+  if (status == GCONV_OK || status == GCONV_EMPTY_INPUT
+      || status == GCONV_FULL_OUTPUT)
     {
-      if (*(wchar_t *)data.outbuf == L'\0')
+      if (data.outbufavail > 0 && *(wchar_t *)data.outbuf == L'\0')
 	{
 	  /* The converted character is the NUL character.  */
 	  assert (mbsinit (data.statep));