Subject: bug#61321: 30.0.50; Fail to load file with file variables and CRLF EOL without EOL conversion

From: Eli Zaretskii <[email-masked]>
Date: Mon, 06 Feb 2023 17:17:46 +0200

> Date: Mon, 06 Feb 2023 23:02:01 +0900
> From: Kazuhiro Ito <[email-masked]>
> 
> (let ((filename (expand-file-name "test.txt"
> 				  temporary-file-directory)))
>   (with-temp-buffer
>     (setq buffer-file-coding-system 'dos)
>     (insert "This is a test.\n"
> 	    "\n"
> 	    "Local Variables:\n"
> 	    "comment-column: 0\n"
> 	    "End:\n")
>     (write-file filename))
>   (unwind-protect
>       (let (;; (coding-system-for-read 'unix)
> 	    (inhibit-eol-conversion t)
> 	    )
> 	(find-file filename))
>     (delete-file filename)))
> 
> -> Local variables entry is missing the suffix

Thanks.  Does the patch below give good results?

diff --git a/lisp/files.el b/lisp/files.el
index 9da8244..b0ec6bb 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -4017,6 +4017,7 @@ hack-local-variables--find-variables
 	  (forward-line 1)
 	  (let ((startpos (point))
 	        endpos
+                (selective-p (eq selective-display t))
 	        (thisbuf (current-buffer)))
 	    (save-excursion
 	      (unless (let ((case-fold-search t))
@@ -4033,7 +4034,8 @@ hack-local-variables--find-variables
 	    (with-temp-buffer
 	      (insert-buffer-substring thisbuf startpos endpos)
 	      (goto-char (point-min))
-	      (subst-char-in-region (point) (point-max) ?\^m ?\n)
+              (if selective-p
+	          (subst-char-in-region (point) (point-max) ?\r ?\n))
 	      (while (not (eobp))
 	        ;; Discard the prefix.
 	        (if (looking-at prefix)