Subject: bug#58605: 29.0.50; Commit 2a2f5530fa2 breaks ldap-search-internal

From: Juri Linkov <[email-masked]>
Date: Thu, 20 Oct 2022 11:12:04 +0300

> commit 2a2f5530fa230e2b994be5683e63763833bb6a0a breaks
> ldap-search-internal for searches with empty results.

I confirm that ldap search is broken.  When the output contains for example:

  dn: cn=admin,dc=example,dc=com

then it raises the error:

  insert-file-contents: Opening input file: No such file or directory, ~/cn=admin,dc=example,dc=com

> The added “?” should be removed there again:
>
> @@ -699,7 +699,7 @@ ldap-search-internal
>  	  (forward-line 1)
>            (while (looking-at "^\\([A-Za-z][-A-Za-z0-9]*\
>  \\|[0-9]+\\(?:\\.[0-9]+\\)*\\)\\(;[-A-Za-z0-9]+\\)*[=:\t ]+\
> -\\(<[\t ]*file://\\)\\(.*\\)$")
> +\\(<[\t ]*file://\\)?\\(.*\\)$")
>  	    (setq name (match-string 1)
>  		  value (match-string 4))
>              ;; Need to handle file:///D:/... as generated by OpenLDAP

Removing “?” doesn't fix the problem because then nil is returned
even in case when there are results.

I guess this whole block

	      (with-current-buffer bufval
		(erase-buffer)
		(set-buffer-multibyte nil)
		(insert-file-contents-literally value)
		(delete-file value)
		(setq value (buffer-string)))

should be executed only on a condition that checks that value contains "file://".