From bbb0cab5ee943d018272d1e058895047211417e1 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Sat, 20 Aug 2005 04:46:25 +0000 Subject: [PATCH] Fixed bug in verifyPath() that was breaking PHYSFS_setSaneConfig() and other corner cases. --- CHANGELOG | 2 ++ physfs.c | 13 +++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 4362f7d4..97278204 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,8 @@ * CHANGELOG. */ +08202005 - Fixed bug in verifyPath() that was breaking PHYSFS_setSaneConfig() + and other corner cases. 07242005 - Patched to compile on BeOS. 07232005 - Fixed bug in zip archiver (thanks, Jörg Walter!). More minor OS/2 tweaks. Updated zlib to 1.2.3, which properly diff --git a/physfs.c b/physfs.c index 97ce50ba..f1f7d04a 100644 --- a/physfs.c +++ b/physfs.c @@ -1107,7 +1107,7 @@ int PHYSFS_setSaneConfig(const char *organization, const char *appName, BAIL_IF_MACRO(!initialized, ERR_NOT_INITIALIZED, 0); - /* set write dir... */ + /* set write dir... */ str = (char *) allocator.Malloc( strlen(userdir) + (strlen(organization) * 2) + (strlen(appName) * 2) + (strlen(dirsep) * 3) + 2); @@ -1325,12 +1325,14 @@ static int verifyPath(DirHandle *h, char **_fname, int allowMissing) { while (1) { + int rc = 0; end = strchr(start, '/'); - if (end != NULL) - *end = '\0'; - if (h->funcs->isSymLink(h->opaque, fname, &retval)) - BAIL_MACRO(ERR_SYMLINK_DISALLOWED, 0); /* insecure. */ + if (end != NULL) *end = '\0'; + rc = h->funcs->isSymLink(h->opaque, fname, &retval); + if (end != NULL) *end = '/'; + + BAIL_IF_MACRO(rc, ERR_SYMLINK_DISALLOWED, 0); /* insecure. */ /* break out early if path element is missing. */ if (!retval) @@ -1348,7 +1350,6 @@ static int verifyPath(DirHandle *h, char **_fname, int allowMissing) if (end == NULL) break; - *end = '/'; start = end + 1; } /* while */ } /* if */