aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2014-05-21 18:03:18 +0300
committerEli Zaretskii2014-05-21 18:03:18 +0300
commit5e2e0fa4565f2496fa5db299e30d6b08088cedde (patch)
tree612a948dd9bade3ebc387ede58da61807bcf1a97 /src
parentb0df8b953533b67ffba27879b64faab65c7642a6 (diff)
downloademacs-5e2e0fa4565f2496fa5db299e30d6b08088cedde.tar.gz
emacs-5e2e0fa4565f2496fa5db299e30d6b08088cedde.zip
Fix bug #17539 with infinite recursion during scroll commands.
src/xdisp.c (move_it_in_display_line_to): Avoid infinite recursion: when closest_pos is identical to to_charpos, don't recurse, since we already tried that, and failed.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog6
-rw-r--r--src/xdisp.c16
2 files changed, 17 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index cb54bbd0e70..1e6bdcb4999 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
12014-05-21 Eli Zaretskii <eliz@gnu.org>
2
3 * xdisp.c (move_it_in_display_line_to): Avoid infinite recursion:
4 when closest_pos is identical to to_charpos, don't recurse, since
5 we already tried that, and failed. (Bug#17539)
6
12014-05-20 Eli Zaretskii <eliz@gnu.org> 72014-05-20 Eli Zaretskii <eliz@gnu.org>
2 8
3 * w32fns.c (unwind_create_frame) [GLYPH_DEBUG]: If we are 9 * w32fns.c (unwind_create_frame) [GLYPH_DEBUG]: If we are
diff --git a/src/xdisp.c b/src/xdisp.c
index 88d61a6bbc0..e9c3cb1aac6 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -8812,8 +8812,11 @@ move_it_in_display_line_to (struct it *it,
8812 if (closest_pos < ZV) 8812 if (closest_pos < ZV)
8813 { 8813 {
8814 RESTORE_IT (it, &ppos_it, ppos_data); 8814 RESTORE_IT (it, &ppos_it, ppos_data);
8815 move_it_in_display_line_to (it, closest_pos, -1, 8815 /* Don't recurse if closest_pos is equal to
8816 MOVE_TO_POS); 8816 to_charpos, since we have just tried that. */
8817 if (closest_pos != to_charpos)
8818 move_it_in_display_line_to (it, closest_pos, -1,
8819 MOVE_TO_POS);
8817 result = MOVE_POS_MATCH_OR_ZV; 8820 result = MOVE_POS_MATCH_OR_ZV;
8818 } 8821 }
8819 else 8822 else
@@ -8874,8 +8877,9 @@ move_it_in_display_line_to (struct it *it,
8874 && !at_eob_p && closest_pos < ZV) 8877 && !at_eob_p && closest_pos < ZV)
8875 { 8878 {
8876 RESTORE_IT (it, &ppos_it, ppos_data); 8879 RESTORE_IT (it, &ppos_it, ppos_data);
8877 move_it_in_display_line_to (it, closest_pos, -1, 8880 if (closest_pos != to_charpos)
8878 MOVE_TO_POS); 8881 move_it_in_display_line_to (it, closest_pos, -1,
8882 MOVE_TO_POS);
8879 } 8883 }
8880 result = MOVE_POS_MATCH_OR_ZV; 8884 result = MOVE_POS_MATCH_OR_ZV;
8881 break; 8885 break;
@@ -8893,7 +8897,9 @@ move_it_in_display_line_to (struct it *it,
8893 if (closest_pos < ZV) 8897 if (closest_pos < ZV)
8894 { 8898 {
8895 RESTORE_IT (it, &ppos_it, ppos_data); 8899 RESTORE_IT (it, &ppos_it, ppos_data);
8896 move_it_in_display_line_to (it, closest_pos, -1, MOVE_TO_POS); 8900 if (closest_pos != to_charpos)
8901 move_it_in_display_line_to (it, closest_pos, -1,
8902 MOVE_TO_POS);
8897 } 8903 }
8898 result = MOVE_POS_MATCH_OR_ZV; 8904 result = MOVE_POS_MATCH_OR_ZV;
8899 break; 8905 break;