Fix redisplay crash (Bug#6177).

* xdisp.c (redisplay_window): After redisplay, check if point is
still valid before setting it (Bug#6177).
This commit is contained in:
Chong Yidong 2010-05-27 11:49:01 -04:00
parent ecb0ab90c4
commit f44a59e61a
2 changed files with 15 additions and 2 deletions

View file

@ -1,3 +1,8 @@
2010-05-27 Chong Yidong <cyd@stupidchicken.com>
* xdisp.c (redisplay_window): After redisplay, check if point is
still valid before setting it (Bug#6177).
2010-05-27 Glenn Morris <rgm@gnu.org>
* Makefile.in, autodeps.mk, deps.mk, ns.mk:

View file

@ -14788,8 +14788,16 @@ redisplay_window (window, just_this_one_p)
(*FRAME_TERMINAL (f)->redeem_scroll_bar_hook) (w);
}
/* Restore current_buffer and value of point in it. */
TEMP_SET_PT_BOTH (CHARPOS (opoint), BYTEPOS (opoint));
/* Restore current_buffer and value of point in it. The window
update may have changed the buffer, so first make sure `opoint'
is still valid (Bug#6177). */
if (CHARPOS (opoint) < BEGV)
TEMP_SET_PT_BOTH (BEGV, BEGV_BYTE);
else if (CHARPOS (opoint) > ZV)
TEMP_SET_PT_BOTH (Z, Z_BYTE);
else
TEMP_SET_PT_BOTH (CHARPOS (opoint), BYTEPOS (opoint));
set_buffer_internal_1 (old);
/* Avoid an abort in TEMP_SET_PT_BOTH if the buffer has become
shorter. This can be caused by log truncation in *Messages*. */