From: Barry O'Reilly Date: Sun, 2 Mar 2014 17:37:32 +0000 (-0500) Subject: * simple.el (undo-elt-in-region): Fix buffer corruption for edge X-Git-Tag: emacs-24.3.90~318 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=e3d090b4c50756f1ed9db55553a98b515eec5eaa;p=emacs.git * simple.el (undo-elt-in-region): Fix buffer corruption for edge case of undo in region. * automated/undo-tests.el (undo-test-in-region-not-most-recent): Add new test of undo in region. (undo-test-in-region-eob): Add test case described at http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16411#41 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 17f225708a2..a2a88f4b86b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2014-03-02 Barry O'Reilly + + * simple.el (undo-elt-in-region): Fix buffer corruption for edge + case of undo in region. + 2014-03-02 Martin Rudalics * window.el (fit-window-to-buffer): Fix argument in window-size diff --git a/lisp/simple.el b/lisp/simple.el index bf8b6a75ac7..18448331ff0 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -2426,7 +2426,7 @@ If it crosses the edge, we return nil." ((stringp (car undo-elt)) ;; (TEXT . POSITION) (and (>= (abs (cdr undo-elt)) start) - (< (abs (cdr undo-elt)) end))) + (<= (abs (cdr undo-elt)) end))) ((and (consp undo-elt) (markerp (car undo-elt))) ;; This is a marker-adjustment element (MARKER . ADJUSTMENT). ;; See if MARKER is inside the region. diff --git a/test/ChangeLog b/test/ChangeLog index 9082f2ace2a..41416baa3aa 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,10 @@ +2014-03-02 Barry O'Reilly + + * automated/undo-tests.el (undo-test-in-region-not-most-recent): + Add new test of undo in region. + (undo-test-in-region-eob): Add test case described at + http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16411 + 2014-02-28 Michael Albinus * automated/tramp-tests.el (tramp--test-enabled) diff --git a/test/automated/undo-tests.el b/test/automated/undo-tests.el index 53af574a8ee..8a963f10028 100644 --- a/test/automated/undo-tests.el +++ b/test/automated/undo-tests.el @@ -226,6 +226,48 @@ (should-not (buffer-modified-p)))) (delete-file tempfile)))) +(ert-deftest undo-test-in-region-not-most-recent () + "Test undo in region of an edit not the most recent." + (with-temp-buffer + (buffer-enable-undo) + (transient-mark-mode 1) + (insert "1111") + (undo-boundary) + (goto-char 2) + (insert "2") + (forward-char 2) + (undo-boundary) + (insert "3") + (undo-boundary) + ;; Highlight around "2", not "3" + (push-mark (+ 3 (point-min)) t t) + (setq mark-active t) + (goto-char (point-min)) + (undo) + (should (string= (buffer-string) + "11131")))) + +(ert-deftest undo-test-in-region-eob () + "Test undo in region of a deletion at EOB, demonstrating bug 16411." + (with-temp-buffer + (buffer-enable-undo) + (transient-mark-mode 1) + (insert "This sentence corrupted?") + (undo-boundary) + ;; Same as recipe at + ;; http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16411 + (insert "aaa") + (undo-boundary) + (undo) + ;; Select entire buffer + (push-mark (point) t t) + (setq mark-active t) + (goto-char (point-min)) + ;; Should undo the undo of "aaa", ie restore it. + (undo) + (should (string= (buffer-string) + "This sentence corrupted?aaa")))) + (defun undo-test-all (&optional interactive) "Run all tests for \\[undo]." (interactive "p")