From 285ed41605ca44794dd7fd16abf63eb3f8808238 Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Sun, 29 Nov 2015 20:42:02 +0000 Subject: * lisp/character-fold.el (character-fold-to-regexp): Be careful not to return huge regexps. --- lisp/character-fold.el | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'lisp/character-fold.el') diff --git a/lisp/character-fold.el b/lisp/character-fold.el index c2b9a0729e6..88622b32a7d 100644 --- a/lisp/character-fold.el +++ b/lisp/character-fold.el @@ -150,9 +150,8 @@ Any character in STRING that has an entry in `character-fold-table' is replaced with that entry (which is a regexp) and other characters are `regexp-quote'd. -Note that this function can potentially return regexps too long -for Emacs to handle. If STRING is longer than 30 characters, -consider not using this function. +If the resulting regexp would be too long for Emacs to handle, +just return the result of calling `regexp-quote' on STRING. FROM is for internal use. It specifies an index in the STRING from which to start." @@ -222,7 +221,11 @@ from which to start." (setq i (1+ i))) (when (> spaces 0) (push (character-fold--make-space-string spaces) out)) - (apply #'concat (nreverse out)))) + (let ((regexp (apply #'concat (nreverse out)))) + ;; Limited by `MAX_BUF_SIZE' in `regex.c'. + (if (> (length regexp) 32000) + (regexp-quote string) + regexp)))) ;;; Commands provided for completeness. -- cgit v1.2.1