From 8db27a12367da9e7ed69608bb7ba3b15f00cb3d4 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 14 Aug 2017 11:43:18 -0400 Subject: [PATCH] Fix symlink filtering for enumeration under a virtual mount point. --- src/physfs.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/physfs.c b/src/physfs.c index caf6e19f..d2248653 100644 --- a/src/physfs.c +++ b/src/physfs.c @@ -2348,6 +2348,7 @@ typedef struct SymlinkFilterData PHYSFS_EnumerateCallback callback; void *callbackData; DirHandle *dirhandle; + const char *arcfname; PHYSFS_ErrorCode errcode; } SymlinkFilterData; @@ -2357,8 +2358,9 @@ static int enumCallbackFilterSymLinks(void *_data, const char *origdir, { SymlinkFilterData *data = (SymlinkFilterData *) _data; const DirHandle *dh = data->dirhandle; + const char *arcfname = data->arcfname; PHYSFS_Stat statbuf; - const char *trimmedDir = (*origdir == '/') ? (origdir+1) : origdir; + const char *trimmedDir = (*arcfname == '/') ? (arcfname + 1) : arcfname; const size_t slen = strlen(trimmedDir) + strlen(fname) + 2; char *path = (char *) __PHYSFS_smallAlloc(slen); int retval = 1; @@ -2434,6 +2436,7 @@ int PHYSFS_enumerate(const char *_fn, PHYSFS_EnumerateCallback cb, void *data) if ((!allowSymLinks) && (i->funcs->info.supportsSymlinks)) { filterdata.dirhandle = i; + filterdata.arcfname = arcfname; filterdata.errcode = PHYSFS_ERR_OK; retval = i->funcs->enumerate(i->opaque, arcfname, enumCallbackFilterSymLinks,