[There is a simple reproducer at end of the bug report.] First, the documentation of ff-other-file-alist fails to mention that the value of the variable does not have to be alist, it can be a symbol as well. More importantly, if the associated value is a function, then there's no way for the function to signal that it cannot find a related file. If the function returns "/nonexistent", then ff-find-the-other-file (with the default settings) will try to create "/nonexistent". If the function returns nil, then ff-find-the-other-file will call ff-get-file-name and: (ff-get-file-name '("." "/usr/include" "/usr/local/include/*") nil nil) ==> "/home/nemethf/.emacs.d/News/drafts/drafts/679" "emacs -Q -l bug.el" reproduces the problem by setting uniquify-buffer-name-style. However, my uniquify-buffer-name-style is 'forward and not nil. Maybe Gnus changes uniquify-buffer-name-style under the hood, because drafts/679 corresponds to a buffer named "*sent wide reply to Somebody*<2>". I tend to think this bug in line 577 of find-file.el: http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/find-file.el?id=958924a8126cf532d44c4b446d13ed744438cc9b#n577 But I don't understand the purpose of that string-match-p. Thanks.