]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid assertion violations when scrolling narrowed buffer
authorEli Zaretskii <eliz@gnu.org>
Mon, 5 Sep 2016 16:57:22 +0000 (19:57 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 5 Sep 2016 16:57:22 +0000 (19:57 +0300)
* src/window.c (window_scroll_pixel_based):
* src/xdisp.c (pos_visible_p): Don't allow simulated redisplay to
start outside the accessible portion of the buffer.  This avoids
assertion violations when some Lisp narrows the buffer to less
than the current window, and then attempts to scroll the buffer.

src/window.c
src/xdisp.c

index 374ef0f838f4370de7fe9fd9b9c6ee8b2e74b833..753ebc16fbff0f06b3700c629307297ff01c3c06 100644 (file)
@@ -4813,8 +4813,9 @@ window_scroll_pixel_based (Lisp_Object window, int n, bool whole, bool noerror)
   SET_TEXT_POS_FROM_MARKER (start, w->start);
   /* Scrolling a minibuffer window via scroll bar when the echo area
      shows long text sometimes resets the minibuffer contents behind
-     our backs.  */
-  if (CHARPOS (start) > ZV)
+     our backs.  Also, someone might narrow-to-region and immediately
+     call a scroll function.  */
+  if (CHARPOS (start) > ZV || CHARPOS (start) < BEGV)
     SET_TEXT_POS (start, BEGV, BEGV_BYTE);
 
   /* If PT is not visible in WINDOW, move back one half of
index dc68cd48e5fec7729f39b58ab094fdea9c7b50de..d1e884820b67b7a0563eb92a4b47f91b8b3ebfed 100644 (file)
@@ -1317,8 +1317,9 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y,
   SET_TEXT_POS_FROM_MARKER (top, w->start);
   /* Scrolling a minibuffer window via scroll bar when the echo area
      shows long text sometimes resets the minibuffer contents behind
-     our backs.  */
-  if (CHARPOS (top) > ZV)
+     our backs.  Also, someone might narrow-to-region and immediately
+     call a scroll function.  */
+  if (CHARPOS (top) > ZV || CHARPOS (top) < BEGV)
     SET_TEXT_POS (top, BEGV, BEGV_BYTE);
 
   /* If the top of the window is after CHARPOS, the latter is surely