From 17ba7ac5d9295d39ec3b97712d061b3c7866a093 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Gerd=20M=C3=B6llmann?= <gerd@gnu.org>
Date: Wed, 28 Sep 2022 16:38:04 +0200
Subject: [PATCH] Avoid nested iteration over intervals (bug#58144)

* src/xdisp.c (strings_with_newlines): Call
buffer_overlay_iter_finish.
---
 src/xdisp.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/xdisp.c b/src/xdisp.c
index cee75def804..6ecd3bdf24f 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -7031,13 +7031,21 @@ strings_with_newlines (ptrdiff_t startpos, ptrdiff_t endpos, struct window *w)
       str = Foverlay_get (overlay, Qbefore_string);
       if (STRINGP (str) && SCHARS (str)
 	  && memchr (SDATA (str), '\n', SBYTES (str)))
-	return true;
+	{
+	  buffer_overlay_iter_finish (current_buffer);
+	  return true;
+	}
       str = Foverlay_get (overlay, Qafter_string);
       if (STRINGP (str) && SCHARS (str)
 	  && memchr (SDATA (str), '\n', SBYTES (str)))
-	return true;
+	{
+	  buffer_overlay_iter_finish (current_buffer);
+	  return true;
+	}
     }
 
+  buffer_overlay_iter_finish (current_buffer);
+
   /* Check for 'display' properties whose values include strings.  */
   Lisp_Object cpos = make_fixnum (startpos);
   Lisp_Object limpos = make_fixnum (endpos);
-- 
2.39.5