From 7d7e0027e7c7ad6584fd44c611b3c77be69391a9 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 28 Jun 2012 15:09:41 -0400 Subject: [PATCH] * src/editfns.c (region_limit): Clip to narrowing. Fixes: debbugs:11770 --- src/ChangeLog | 4 ++++ src/alloc.c | 3 ++- src/editfns.c | 8 ++++++-- src/keyboard.c | 6 +++--- src/w32fns.c | 8 ++++---- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 262ed2ce4d6..241658ac33a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-06-28 Stefan Monnier + + * editfns.c (region_limit): Clip to narrowing (bug#11770). + 2012-06-28 Paul Eggert Avoid integer overflow on scroll-left and scroll-right. diff --git a/src/alloc.c b/src/alloc.c index 2570364e6c1..bb57d46ee03 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -5384,7 +5384,8 @@ See Info node `(elisp)Garbage Collection'. */) turned off in that buffer. Calling truncate_undo_list on Qt tends to return NULL, which effectively turns undo back on. So don't call truncate_undo_list if undo_list is Qt. */ - if (! NILP (nextb->BUFFER_INTERNAL_FIELD (name)) && ! EQ (nextb->BUFFER_INTERNAL_FIELD (undo_list), Qt)) + if (! NILP (nextb->BUFFER_INTERNAL_FIELD (name)) + && ! EQ (nextb->BUFFER_INTERNAL_FIELD (undo_list), Qt)) truncate_undo_list (nextb); /* Shrink buffer gaps, but skip indirect and dead buffers. */ diff --git a/src/editfns.c b/src/editfns.c index 63e77004f8b..e8f55c9427b 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -283,8 +283,12 @@ region_limit (int beginningp) error ("The mark is not set now, so there is no region"); if ((PT < XFASTINT (m)) == (beginningp != 0)) - m = make_number (PT); - return m; + return make_number (PT); + else + { /* Clip to the current narrowing (bug#11770). */ + ptrdiff_t mark = XFASTINT (m); + return make_number (mark < BEGV ? BEGV : mark > ZV ? ZV : m); + } } DEFUN ("region-beginning", Fregion_beginning, Sregion_beginning, 0, 0, 0, diff --git a/src/keyboard.c b/src/keyboard.c index c76e015a6f4..fccef038f8a 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -3854,7 +3854,7 @@ kbd_buffer_get_event (KBOARD **kbp, EMACS_TIME duration; EMACS_GET_TIME (duration); if (EMACS_TIME_GE (duration, *end_time)) - return Qnil; /* finished waiting */ + return Qnil; /* Finished waiting. */ else { EMACS_SUB_TIME (duration, *end_time, duration); @@ -7309,8 +7309,8 @@ handle_user_signal (int sig) for (p = user_signals; p; p = p->next) if (p->sig == sig) { - if (special_event_name && - strcmp (special_event_name, p->name) == 0) + if (special_event_name + && strcmp (special_event_name, p->name) == 0) { /* Enter the debugger in many ways. */ debug_on_next_call = 1; diff --git a/src/w32fns.c b/src/w32fns.c index acd42792b9b..dd81e24fbee 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -2509,19 +2509,19 @@ post_character_message (HWND hwnd, UINT msg, woken up if blocked in sys_select, but we do NOT want to post the quit_char message itself (because it will usually be as if the user had typed quit_char twice). Instead, we post a dummy - message that has no particular effect. */ + message that has no particular effect. */ { int c = wParam; if (isalpha (c) && wmsg.dwModifiers == ctrl_modifier) c = make_ctrl_char (c) & 0377; if (c == quit_char - || (wmsg.dwModifiers == 0 && - w32_quit_key && wParam == w32_quit_key)) + || (wmsg.dwModifiers == 0 + && w32_quit_key && wParam == w32_quit_key)) { Vquit_flag = Qt; /* The choice of message is somewhat arbitrary, as long as - the main thread handler just ignores it. */ + the main thread handler just ignores it. */ msg = WM_NULL; /* Interrupt any blocking system calls. */ -- 2.39.2