From: Mattias Engdegård Date: Fri, 25 Sep 2020 11:15:42 +0000 (+0200) Subject: Fix replace-in-string infloop with empty pattern string (bug#43598) X-Git-Tag: emacs-28.0.90~5894 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=8a253a96a0db4dd585ab787345657d952c7babec;p=emacs.git 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. --- diff --git a/lisp/subr.el b/lisp/subr.el index 33ed0bc9367..fba31b7cf75 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -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) diff --git a/test/lisp/subr-tests.el b/test/lisp/subr-tests.el index fa728e430fc..505408fa110 100644 --- a/test/lisp/subr-tests.el +++ b/test/lisp/subr-tests.el @@ -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