***************
*** 506,510 ****
       int size;
  {
!   int mb_len = 0;
    size_t mbchar_bytes_length;
    wchar_t wc;
--- 514,518 ----
       int size;
  {
!   int mb_len, c;
    size_t mbchar_bytes_length;
    wchar_t wc;
***************
*** 513,523 ****
    memset(&ps, 0, sizeof (mbstate_t));
    memset(&ps_back, 0, sizeof (mbstate_t));
!   
    while (mb_len < size)
      {
        RL_SETSTATE(RL_STATE_MOREINPUT);
!       mbchar[mb_len++] = rl_read_key ();
        RL_UNSETSTATE(RL_STATE_MOREINPUT);
  
        mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
        if (mbchar_bytes_length == (size_t)(-1))
--- 521,537 ----
    memset(&ps, 0, sizeof (mbstate_t));
    memset(&ps_back, 0, sizeof (mbstate_t));
! 
!   mb_len = 0;  
    while (mb_len < size)
      {
        RL_SETSTATE(RL_STATE_MOREINPUT);
!       c = rl_read_key ();
        RL_UNSETSTATE(RL_STATE_MOREINPUT);
  
+       if (c < 0)
+ 	break;
+ 
+       mbchar[mb_len++] = c;
+ 
        mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
        if (mbchar_bytes_length == (size_t)(-1))
***************
*** 557,561 ****
    c = first;
    memset (mb, 0, mlen);
!   for (i = 0; i < mlen; i++)
      {
        mb[i] = (char)c;
--- 571,575 ----
    c = first;
    memset (mb, 0, mlen);
!   for (i = 0; c >= 0 && i < mlen; i++)
      {
        mb[i] = (char)c;
