From: Noam Postavsky Date: Thu, 8 Dec 2016 04:17:37 +0000 (-0500) Subject: Fix rx-any with range with ?\] and ?- X-Git-Tag: emacs-26.0.90~1057 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a7523ba955005d546d7b3d0351dfefc1347b4b47;p=emacs.git 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. --- 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 . + +;;; 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.