Subject: Re: bug#36502: Fwd: bug#36502: 27.0.50; infinite loop in file-name-case-insensitive-p

From: Eli Zaretskii <[email-masked]>
Date: Mon, 08 Jul 2019 20:23:21 +0300

> From: Ken Brown <[email-masked]>
> CC: "[email-masked]" <[email-masked]>, "[email-masked]"
> 	<[email-masked]>, "[email-masked]" <[email-masked]>, Andreas
>  Schwab <[email-masked]>
> Date: Mon, 8 Jul 2019 16:44:23 +0000
> 
> --- a/src/fileio.c
> +++ b/src/fileio.c
> @@ -804,7 +804,22 @@ DEFUN ("expand-file-name", Fexpand_file_name, 
> Sexpand_file_name, 1, 2, 0,
> 
>     /* Use the buffer's default-directory if DEFAULT_DIRECTORY is omitted.  */
>     if (NILP (default_directory))
> -    default_directory = BVAR (current_buffer, directory);
> +    {
> +      Lisp_Object dir = BVAR (current_buffer, directory);
> +      /* The buffer's default-directory should be absolute.  If it
> +        isn't, try to expand it relative to invocation-directory.
> +        But we have to be careful to avoid an infinite loop, because
> +        the code in emacs.c that sets Vinvocation_directory might
> +        call Fexpand_file_name.  */
> +      if (STRINGP (dir))
> +       {
> +         if (!NILP (Ffile_name_absolute_p (dir)))
> +           default_directory = dir;
> +         else if (STRINGP (Vinvocation_directory)
> +                  && !NILP (Ffile_name_absolute_p (Vinvocation_directory)))
> +           default_directory = Fexpand_file_name (dir, Vinvocation_directory);
> +       }
> +    }
>     if (! STRINGP (default_directory))
>       {
>   #ifdef DOS_NT

LGTM, thanks.  Can we have a test for this subtle use case, so that we
never regress?