]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix bug #17539 with infinite recursion during scroll commands.
authorEli Zaretskii <eliz@gnu.org>
Wed, 21 May 2014 15:03:18 +0000 (18:03 +0300)
committerEli Zaretskii <eliz@gnu.org>
Wed, 21 May 2014 15:03:18 +0000 (18:03 +0300)
 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.

src/ChangeLog
src/xdisp.c

index cb54bbd0e703ae03852390e171993d56d6d3753d..1e6bdcb4999eba735bd959bec189af529e860b63 100644 (file)
@@ -1,3 +1,9 @@
+2014-05-21  Eli Zaretskii  <eliz@gnu.org>
+
+       * 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.  (Bug#17539)
+
 2014-05-20  Eli Zaretskii  <eliz@gnu.org>
 
        * w32fns.c (unwind_create_frame) [GLYPH_DEBUG]: If we are
index 88d61a6bbc03af88242afdb8601b87c38db6beb1..e9c3cb1aac6a23a2f19671700f6cf979cbc39858 100644 (file)
@@ -8812,8 +8812,11 @@ move_it_in_display_line_to (struct it *it,
                  if (closest_pos < ZV)
                    {
                      RESTORE_IT (it, &ppos_it, ppos_data);
-                     move_it_in_display_line_to (it, closest_pos, -1,
-                                                 MOVE_TO_POS);
+                     /* Don't recurse if closest_pos is equal to
+                        to_charpos, since we have just tried that.  */
+                     if (closest_pos != to_charpos)
+                       move_it_in_display_line_to (it, closest_pos, -1,
+                                                   MOVE_TO_POS);
                      result = MOVE_POS_MATCH_OR_ZV;
                    }
                  else
@@ -8874,8 +8877,9 @@ move_it_in_display_line_to (struct it *it,
                      && !at_eob_p && closest_pos < ZV)
                    {
                      RESTORE_IT (it, &ppos_it, ppos_data);
-                     move_it_in_display_line_to (it, closest_pos, -1,
-                                                 MOVE_TO_POS);
+                     if (closest_pos != to_charpos)
+                       move_it_in_display_line_to (it, closest_pos, -1,
+                                                   MOVE_TO_POS);
                    }
                  result = MOVE_POS_MATCH_OR_ZV;
                  break;
@@ -8893,7 +8897,9 @@ move_it_in_display_line_to (struct it *it,
              if (closest_pos < ZV)
                {
                  RESTORE_IT (it, &ppos_it, ppos_data);
-                 move_it_in_display_line_to (it, closest_pos, -1, MOVE_TO_POS);
+                 if (closest_pos != to_charpos)
+                   move_it_in_display_line_to (it, closest_pos, -1,
+                                               MOVE_TO_POS);
                }
              result = MOVE_POS_MATCH_OR_ZV;
              break;