summaryrefslogtreecommitdiff
path: root/lisp/character-fold.el
diff options
context:
space:
mode:
authorArtur Malabarba <bruce.connor.am@gmail.com>2015-11-29 20:42:02 +0000
committerArtur Malabarba <bruce.connor.am@gmail.com>2015-11-29 20:42:25 +0000
commit285ed41605ca44794dd7fd16abf63eb3f8808238 (patch)
treeb3a3ec7cec1ade26df247bfdb6d7ee47e1dbe306 /lisp/character-fold.el
parent4c6f368c3dcff674ff1891107abd7b54e92cf4cb (diff)
downloademacs-285ed41605ca44794dd7fd16abf63eb3f8808238.tar.gz
* lisp/character-fold.el (character-fold-to-regexp): Be careful
not to return huge regexps.
Diffstat (limited to 'lisp/character-fold.el')
-rw-r--r--lisp/character-fold.el11
1 files changed, 7 insertions, 4 deletions
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.