From 8a253a96a0db4dd585ab787345657d952c7babec Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mattias=20Engdeg=C3=A5rd?= Date: Fri, 25 Sep 2020 13:15:42 +0200 Subject: [PATCH] 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. --- lisp/subr.el | 2 ++ test/lisp/subr-tests.el | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) 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 -- 2.39.5