Fix replace-in-string infloop with empty pattern string (bug#43598)

* lisp/subr.el (replace-in-string): Raise an error if FROMSTRING is
empty.
* test/lisp/subr-tests.el (replace-in-string): Add test case.
This commit is contained in:
Mattias Engdegård 2020-09-25 13:15:42 +02:00
parent d964375ad3
commit 8a253a96a0
2 changed files with 5 additions and 1 deletions

View file

@ -4432,6 +4432,8 @@ Unless optional argument INPLACE is non-nil, return a new string."
(defun replace-in-string (fromstring tostring instring)
"Replace FROMSTRING with TOSTRING in INSTRING each time it occurs."
(declare (pure t))
(when (equal fromstring "")
(signal 'wrong-length-argument fromstring))
(let ((start 0)
(result nil)
pos)

View file

@ -464,7 +464,9 @@ See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=19350."
(should (equal (replace-in-string "\377" "x" "a\377b")
"axb"))
(should (equal (replace-in-string "\377" "x" "a\377ø")
"axø")))
"axø"))
(should-error (replace-in-string "" "x" "abc")))
(provide 'subr-tests)
;;; subr-tests.el ends here