Assuming /tmp/[ab].py are existing files.
emacs -Q -f server-start /:/tmp/a.py
Then:
emacsclient --create-frame --eval '(ediff "/tmp/a.py" "/tmp/b.py")'
will result un an error:
*ERROR*: Wrong type argument: arrayp, nil
Backtrace is
Debugger entered--Lisp error: (wrong-type-argument arrayp nil)
file-name-non-special(verify-visited-file-modtime #<buffer a.py>)
verify-visited-file-modtime(#<buffer a.py>)
apply(verify-visited-file-modtime #<buffer a.py>)
tramp-run-real-handler(verify-visited-file-modtime (#<buffer a.py>))
tramp-file-name-handler(verify-visited-file-modtime #<buffer a.py>)
verify-visited-file-modtime(#<buffer a.py>)
find-file-noselect("/tmp/a.py")
ediff-find-file(file-A buf-A ediff-last-dir-A startup-hooks)
ediff-files-internal("/tmp/a.py" "/tmp/b.py" nil nil ediff-files)
ediff("/tmp/a.py" "/tmp/b.py")
eval((ediff "/tmp/a.py" "/tmp/b.py"))
server-eval-and-print("(ediff \"/tmp/a.py\" \"/tmp/b.py\")" #<process server <3>>)
(more uninteresting frames)
Patch is attached.