aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNoam Postavsky2016-12-07 23:17:37 -0500
committerNoam Postavsky2016-12-18 08:44:45 -0500
commita7523ba955005d546d7b3d0351dfefc1347b4b47 (patch)
treedf5a2d6f4b6d8f8625e4559637553146a8aa718e
parentb21a3e726feb521d013d3bda6dd8fd8e0c78ad37 (diff)
downloademacs-a7523ba955005d546d7b3d0351dfefc1347b4b47.tar.gz
emacs-a7523ba955005d546d7b3d0351dfefc1347b4b47.zip
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.el2
-rw-r--r--test/lisp/emacs-lisp/rx-tests.el37
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."
521 (setq args (nconc (delq ?- args) (list ?-)))) 521 (setq args (nconc (delq ?- args) (list ?-))))
522 ((setq m (assq ?- args)) 522 ((setq m (assq ?- args))
523 ;; next to the bracket's range, make the second range 523 ;; next to the bracket's range, make the second range
524 (setcdr args (cons m (delq m args)))))) 524 (setcdr args (cons m (delq m (cdr args)))))))
525 ;; bracket in the end range 525 ;; bracket in the end range
526 ;; => "[]...-]" 526 ;; => "[]...-]"
527 ((setq m (rassq ?\] args)) 527 ((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 @@
1;;; rx-tests.el --- test for rx.el functions -*- lexical-binding: t -*-
2
3;; Copyright (C) 2016 Free Software Foundation, Inc.
4
5;; This file is part of GNU Emacs.
6
7;; GNU Emacs is free software: you can redistribute it and/or modify
8;; it under the terms of the GNU General Public License as published by
9;; the Free Software Foundation, either version 3 of the License, or
10;; (at your option) any later version.
11
12;; GNU Emacs is distributed in the hope that it will be useful,
13;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15;; GNU General Public License for more details.
16
17;; You should have received a copy of the GNU General Public License
18;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
19
20;;; Commentary:
21
22(require 'ert)
23(require 'rx)
24
25;;; Code:
26
27(ert-deftest rx-char-any ()
28 "Test character alternatives with `\]' and `-' (Bug#25123)."
29 (should (string-match
30 (rx string-start (1+ (char (?\] . ?\{) (?< . ?\]) (?- . ?:)))
31 string-end)
32 (apply #'string (nconc (number-sequence ?\] ?\{)
33 (number-sequence ?< ?\])
34 (number-sequence ?- ?:))))))
35
36(provide 'rx-tests)
37;; rx-tests.el ends here.