1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 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
- --- bash-3.2/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
- --- bash-3.2/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_ */
|