diff -ur bash-4.2.42.orig/lib/readline/display.c bash-4.2.42/lib/readline/display.c
--- bash-4.2.42.orig/lib/readline/display.c	2009-09-26 20:37:33.000000000 +0200
+++ bash-4.2.42/lib/readline/display.c	2013-01-21 20:17:09.523020281 +0100
@@ -62,7 +62,7 @@
 static void update_line PARAMS((char *, char *, int, int, int, int));
 static void space_to_eol PARAMS((int));
 static void delete_chars PARAMS((int));
-static void insert_some_chars PARAMS((char *, int, int));
+static void insert_some_spaces PARAMS((int));
 static void cr PARAMS((void));
 
 /* State of visible and invisible lines. */
@@ -1638,8 +1638,9 @@
 		        (col_lendiff < prompt_visible_length)) == 0) &&
 		      (visible_wrap_offset >= current_invis_chars))
 	    {
-	      insert_some_chars (nfd, lendiff, col_lendiff);
-	      _rl_last_c_pos += col_lendiff;
+	      insert_some_spaces(col_lendiff);
+	      _rl_output_some_chars (nfd, nls - nfd);
+	      _rl_last_c_pos += _rl_col_width(nfd, 0, nls - nfd, 0);
 	    }
 #if 0		/* XXX - for now */
 	  else if ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) && _rl_last_c_pos == 0 && wrap_offset && (nfd-new) <= prompt_last_invisible && col_lendiff < prompt_visible_length && visible_wrap_offset >= current_invis_chars)
@@ -1675,16 +1676,6 @@
 	  temp = nls - nfd;
 	  if ((temp - lendiff) > 0)
 	    {
-	      _rl_output_some_chars (nfd + lendiff, temp - lendiff);
-	     /* XXX -- this bears closer inspection.  Fixes a redisplay bug
-		reported against bash-3.0-alpha by Andreas Schwab involving
-		multibyte characters and prompt strings with invisible
-		characters, but was previously disabled. */
-	      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-		twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff, 1);
-	      else
-		twidth = temp - lendiff;
-	      _rl_last_c_pos += twidth;
 	      /* If nfd begins before the last invisible character in the
 		 prompt, adjust _rl_last_c_pos to account for wrap_offset
 		 and set cpos_adjusted to let the caller know. */
@@ -2347,20 +2338,14 @@
     rl_crlf ();
 }
 
-/* Insert COUNT characters from STRING to the output stream at column COL. */
+/* Insert COL spaces, keeping the cursor at the same position. */
 static void
-insert_some_chars (string, count, col)
-     char *string;
-     int count, col;
+insert_some_spaces (col)
+     int col;
 {
 #if defined (__MSDOS__) || defined (__MINGW32__)
-  _rl_output_some_chars (string, count);
+  /* Nothing to do here. */
 #else
-  /* DEBUGGING */
-  if (MB_CUR_MAX == 1 || rl_byte_oriented)
-    if (count != col)
-      _rl_ttymsg ("debug: insert_some_chars: count (%d) != col (%d)", count, col);
-
   /* If IC is defined, then we do not have to "enter" insert mode. */
   if (_rl_term_IC)
     {
@@ -2368,7 +2353,6 @@
 
       buffer = tgoto (_rl_term_IC, 0, col);
       tputs (buffer, 1, _rl_output_character_function);
-      _rl_output_some_chars (string, count);
     }
   else
     {
@@ -2386,9 +2370,6 @@
 	    tputs (_rl_term_ic, 1, _rl_output_character_function);
 	}
 
-      /* Print the text. */
-      _rl_output_some_chars (string, count);
-
       /* If there is a string to turn off insert mode, we had best use
 	 it now. */
       if (_rl_term_ei && *_rl_term_ei)
