branch: externals/auctex
commit 90fcbd44a0f69b7b6511ef3af33bbc1a09670221
Author: Ikumi Keita <ik...@ikumi.que.jp>
Commit: Ikumi Keita <ik...@ikumi.que.jp>

    Make navigation function robust
    
    * tex.el (TeX-find-macro-end-helper): Cater for corner case that the
    `while' loop is exited or skipped.
    * tests/tex/navigation.el: Add new test.
---
 tests/tex/navigation.el | 54 +++++++++++++++++++++++++++++++++++++++++++++++++
 tex.el                  |  8 +++++---
 2 files changed, 59 insertions(+), 3 deletions(-)

diff --git a/tests/tex/navigation.el b/tests/tex/navigation.el
new file mode 100644
index 0000000..daf1840
--- /dev/null
+++ b/tests/tex/navigation.el
@@ -0,0 +1,54 @@
+;;; navigation.el --- tests for navigation function in TeX buffer
+
+;; Copyright (C) 2019 Free Software Foundation, Inc.
+
+;; This file is part of AUCTeX.
+
+;; AUCTeX is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+
+;; AUCTeX is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with AUCTeX; see the file COPYING.  If not, write to the Free
+;; Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+;; 02110-1301, USA.
+
+;;; Code:
+
+(require 'ert)
+(require 'tex)
+
+(defun TeX-check-f-m-e-h (string &optional position)
+  "Check whether `TeX-find-macro-end-helper' works for exceptional case."
+  (with-temp-buffer
+    (insert string)
+    (should (= (or position (point-max))
+              (TeX-find-macro-end-helper (point-min))))))
+
+(ert-deftest TeX-find-macro-end-helper-single ()
+  ;; single macro ending at EOB
+  (TeX-check-f-m-e-h "\foo"))
+
+(ert-deftest TeX-find-macro-end-helper-curly ()
+  ;; curly braces ending at EOB
+  (TeX-check-f-m-e-h "\foo{bar}"))
+
+(ert-deftest TeX-find-macro-end-helper-curly-fail ()
+  ;; curly brace failing to close at EOB
+  (TeX-check-f-m-e-h "\foo{bar"))
+
+(ert-deftest TeX-find-macro-end-helper-square ()
+  ;; square brackets ending at EOB
+  (TeX-check-f-m-e-h "\foo{bar}[baz]"))
+
+(ert-deftest TeX-find-macro-end-helper-square-fail ()
+  ;; square bracket failing to close at EOB
+  (TeX-check-f-m-e-h "\foo{bar}[baz" (1+ (length "\foo{bar}"))))
+
+;;; navigation.el ends here
diff --git a/tex.el b/tex.el
index 0fda0d5..de8c6cf 100644
--- a/tex.el
+++ b/tex.el
@@ -5484,10 +5484,12 @@ those will be considered part of it."
                           ;; If we cannot find a regular end, use the
                           ;; next whitespace.
                           (save-excursion (skip-chars-forward "^       
")
-                                          (point))))
-           (when (eobp) (throw 'found (point))))
+                                          (point)))))
           (t
-           (throw 'found (point)))))))))
+           (throw 'found (point)))))
+       ;; Make sure that this function does not return nil, even
+       ;; when the above `while' loop is totally skipped. (bug#35638)
+       (throw 'found (point))))))
 
 (defun TeX-find-macro-start (&optional limit)
   "Return the start of a macro.

_______________________________________________
auctex-diffs mailing list
auctex-di...@gnu.org
https://lists.gnu.org/mailman/listinfo/auctex-diffs

Reply via email to