diff options
author | Noam Postavsky <npostavs@gmail.com> | 2016-12-07 23:17:37 -0500 |
---|---|---|
committer | Noam Postavsky <npostavs@gmail.com> | 2016-12-18 08:44:45 -0500 |
commit | a7523ba955005d546d7b3d0351dfefc1347b4b47 (patch) | |
tree | df5a2d6f4b6d8f8625e4559637553146a8aa718e | |
parent | b21a3e726feb521d013d3bda6dd8fd8e0c78ad37 (diff) | |
download | emacs-a7523ba955005d546d7b3d0351dfefc1347b4b47.tar.gz |
Fix rx-any with range with ?\] and ?-
* lisp/emacs-lisp/rx.el: Make sure not to produce a circular
list (Bug#25123).
* test/lisp/emacs-lisp/rx-tests.el (rx-char-any): New test.
-rw-r--r-- | lisp/emacs-lisp/rx.el | 2 | ||||
-rw-r--r-- | test/lisp/emacs-lisp/rx-tests.el | 37 |
2 files changed, 38 insertions, 1 deletions
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el index 66d295e221f..d305597631a 100644 --- a/lisp/emacs-lisp/rx.el +++ b/lisp/emacs-lisp/rx.el @@ -521,7 +521,7 @@ ARG is optional." (setq args (nconc (delq ?- args) (list ?-)))) ((setq m (assq ?- args)) ;; next to the bracket's range, make the second range - (setcdr args (cons m (delq m args)))))) + (setcdr args (cons m (delq m (cdr args))))))) ;; bracket in the end range ;; => "[]...-]" ((setq m (rassq ?\] args)) diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el new file mode 100644 index 00000000000..7ff45f650cb --- /dev/null +++ b/test/lisp/emacs-lisp/rx-tests.el @@ -0,0 +1,37 @@ +;;; rx-tests.el --- test for rx.el functions -*- lexical-binding: t -*- + +;; Copyright (C) 2016 Free Software Foundation, Inc. + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 of the License, or +;; (at your option) any later version. + +;; GNU Emacs 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 GNU Emacs. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: + +(require 'ert) +(require 'rx) + +;;; Code: + +(ert-deftest rx-char-any () + "Test character alternatives with `\]' and `-' (Bug#25123)." + (should (string-match + (rx string-start (1+ (char (?\] . ?\{) (?< . ?\]) (?- . ?:))) + string-end) + (apply #'string (nconc (number-sequence ?\] ?\{) + (number-sequence ?< ?\]) + (number-sequence ?- ?:)))))) + +(provide 'rx-tests) +;; rx-tests.el ends here. |