- Added bash32-025 upstream official patch - Added bash32-024 upstream official patch - Added bash32-023 upstream official patch - Added bash32-022 upstream official patch
		
			
				
	
	
		
			78 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 			     BASH PATCH REPORT
 | |
| 			     =================
 | |
| 
 | |
| Bash-Release: 3.2
 | |
| Patch-ID: bash32-024
 | |
| 
 | |
| Bug-Reported-by:	Peter Volkov <torre_cremata@mail.ru>
 | |
| Bug-Reference-ID:	<1178376645.9063.25.camel@localhost>
 | |
| Bug-Reference-URL:	http://bugs.gentoo.org/177095
 | |
| 
 | |
| Bug-Description:
 | |
| 
 | |
| The readline display code miscalculated the screen position when performing
 | |
| a redisplay in which the new text occupies more screen space that the old,
 | |
| but takes fewer bytes to do so (e.g., when replacing a shorter string
 | |
| containing multibyte characters with a longer one containing only ASCII).
 | |
| 
 | |
| Patch:
 | |
| 
 | |
| *** ../bash-3.2-patched/lib/readline/display.c	Thu Apr 26 11:38:22 2007
 | |
| --- lib/readline/display.c	Thu Jul 12 23:10:10 2007
 | |
| ***************
 | |
| *** 1519,1527 ****
 | |
|         /* Non-zero if we're increasing the number of lines. */
 | |
|         int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
 | |
|         /* Sometimes it is cheaper to print the characters rather than
 | |
|   	 use the terminal's capabilities.  If we're growing the number
 | |
|   	 of lines, make sure we actually cause the new line to wrap
 | |
|   	 around on auto-wrapping terminals. */
 | |
| !       if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
 | |
|   	{
 | |
|   	  /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
 | |
| --- 1568,1596 ----
 | |
|         /* Non-zero if we're increasing the number of lines. */
 | |
|         int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
 | |
| +       /* If col_lendiff is > 0, implying that the new string takes up more
 | |
| + 	 screen real estate than the old, but lendiff is < 0, meaning that it
 | |
| + 	 takes fewer bytes, we need to just output the characters starting
 | |
| + 	 from the first difference.  These will overwrite what is on the
 | |
| + 	 display, so there's no reason to do a smart update.  This can really
 | |
| + 	 only happen in a multibyte environment. */
 | |
| +       if (lendiff < 0)
 | |
| + 	{
 | |
| + 	  _rl_output_some_chars (nfd, temp);
 | |
| + 	  _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
 | |
| + 	  /* If nfd begins before any invisible characters in the prompt,
 | |
| + 	     adjust _rl_last_c_pos to account for wrap_offset and set
 | |
| + 	     cpos_adjusted to let the caller know. */
 | |
| + 	  if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
 | |
| + 	    {
 | |
| + 	      _rl_last_c_pos -= wrap_offset;
 | |
| + 	      cpos_adjusted = 1;
 | |
| + 	    }
 | |
| + 	  return;
 | |
| + 	}
 | |
|         /* Sometimes it is cheaper to print the characters rather than
 | |
|   	 use the terminal's capabilities.  If we're growing the number
 | |
|   	 of lines, make sure we actually cause the new line to wrap
 | |
|   	 around on auto-wrapping terminals. */
 | |
| !       else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
 | |
|   	{
 | |
|   	  /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
 | |
| *** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
 | |
| --- patchlevel.h	Mon Oct 16 14:22:54 2006
 | |
| ***************
 | |
| *** 26,30 ****
 | |
|      looks for to find the patch level (for the sccs version string). */
 | |
|   
 | |
| ! #define PATCHLEVEL 23
 | |
|   
 | |
|   #endif /* _PATCHLEVEL_H_ */
 | |
| --- 26,30 ----
 | |
|      looks for to find the patch level (for the sccs version string). */
 | |
|   
 | |
| ! #define PATCHLEVEL 24
 | |
|   
 | |
|   #endif /* _PATCHLEVEL_H_ */
 |