From: Po Lu Date: Sun, 21 Apr 2024 13:11:22 +0000 (+0800) Subject: Better verify arguments to android-relinquish-directory-access X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=8c118b9847196eed098a7611ee77f2b7124cd5a9;p=emacs.git Better verify arguments to android-relinquish-directory-access * src/androidvfs.c (Fandroid_relinquish_directory_access): Provide for NULL values from android_name_file and remote files. * src/xdisp.c (decode_mode_spec): Don't intern file-remote-p. (syms_of_xdisp) : New defsym. (cherry picked from commit 4773ecb93193495f141e5d60c0c5ded58eaa2c98) --- diff --git a/src/androidvfs.c b/src/androidvfs.c index 9e65dd2b140..c4b3dba4af0 100644 --- a/src/androidvfs.c +++ b/src/androidvfs.c @@ -7805,10 +7805,10 @@ DEFUN ("android-relinquish-directory-access", Sandroid_relinquish_directory_access, 1, 1, "DDirectory: ", doc: /* Relinquish access to the provided directory. -DIRECTORY must be an inferior directory to a subdirectory of -/content/storage. Once the command completes, the parent of DIRECTORY -below that subdirectory from will cease to appear there, but no files -will be removed. */) +DIRECTORY must be the toplevel directory of an open SAF volume (i.e., a +file under /content/storage), or one of its inferiors. Once the command +completes, the SAF directory holding this directory will vanish, but no +files will be removed. */) (Lisp_Object file) { struct android_vnode *vp; @@ -7824,7 +7824,14 @@ will be removed. */) return Qnil; file = ENCODE_FILE (Fexpand_file_name (file, Qnil)); - vp = android_name_file (SSDATA (file)); + + if (!NILP (call1 (Qfile_remote_p, file))) + signal_error ("Cannot relinquish access to remote file", file); + + vp = android_name_file (SSDATA (file)); + + if (!vp) + report_file_error ("Relinquishing directory", file); if (vp->type != ANDROID_VNODE_SAF_TREE) { diff --git a/src/xdisp.c b/src/xdisp.c index 5fe16ab9536..72a217513ef 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -28860,7 +28860,7 @@ decode_mode_spec (struct window *w, register int c, int field_width, Lisp_Object val = Qnil; if (STRINGP (curdir)) - val = dsafe_call1 (intern ("file-remote-p"), curdir); + val = dsafe_call1 (Qfile_remote_p, curdir); val = unbind_to (count, val); @@ -38257,6 +38257,9 @@ The default value is zero, which disables this feature. The recommended non-zero value is between 100000 and 1000000, depending on your patience and the speed of your system. */); max_redisplay_ticks = 0; + + /* Called by decode_mode_spec. */ + DEFSYM (Qfile_remote_p, "file-remote-p"); }