From 496817a9e87c974fe6726da54e48cacc1484507c Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 29 Sep 2022 10:27:23 -0400 Subject: [PATCH] PHYSFS_mkdir() should allow symlinks in the mounted writeDir itself. Fixes #47. --- src/physfs.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/physfs.c b/src/physfs.c index 568f1fc..5222918 100644 --- a/src/physfs.c +++ b/src/physfs.c @@ -2234,7 +2234,12 @@ static int doMkdir(const char *_dname, char *dname) const int rc = h->funcs->stat(h->opaque, dname, &statbuf); if ((!rc) && (currentErrorCode() == PHYSFS_ERR_NOT_FOUND)) exists = 0; - retval = ((rc) && (statbuf.filetype == PHYSFS_FILETYPE_DIRECTORY)); + /* verifyPath made sure that (dname) doesn't have symlinks if they aren't + allowed, but it's possible the mounted writeDir itself has symlinks in it, + (for example "/var" on iOS is a symlink, and the prefpath will be somewhere + under that)...if we mounted that writeDir, we must allow those symlinks here + unconditionally. */ + retval = ( (rc) && ((statbuf.filetype == PHYSFS_FILETYPE_DIRECTORY) || (statbuf.filetype == PHYSFS_FILETYPE_SYMLINK)) ); } /* if */ if (!exists)