Subject: bug#70311: Crash when dnd-indicate-insertion-point is non-nil

From: Eli Zaretskii <[email-masked]>
Date: Sat, 13 Apr 2024 19:00:57 +0300

> From: Po Lu <[email-masked]>
> Cc: [email-masked],  [email-masked]
> Date: Sat, 13 Apr 2024 20:28:14 +0800
> 
> Eli Zaretskii <[email-masked]> writes:
> 
> > So you think the suggested band-aid is the best we can currently do to
> > prevent crashes in those cases?
> 
> Yes, unfortunately.

Does the band-aid below look OK to you?

diff --git a/lisp/dnd.el b/lisp/dnd.el
index 89652d3..de1c58a 100644
--- a/lisp/dnd.el
+++ b/lisp/dnd.el
@@ -149,8 +149,13 @@ dnd-handle-movement
                 (with-selected-window window
                   (scroll-down 1))))))))
       (when dnd-indicate-insertion-point
-        (ignore-errors
-          (goto-char (posn-point posn)))))))
+        (let ((pos (posn-point posn)))
+          ;; We avoid errors here, since on some systems this runs
+          ;; when waiting_for_input is non-zero, and that aborts on
+          ;; error.
+          (if (and pos (<= (point-min) pos (point-max)))
+              (goto-char pos)
+            pos))))))
 
 (defun dnd-handle-one-url (window action url)
   "Handle one dropped url by calling the appropriate handler.