[physfs] Bug - "file not found" if path is substring of another file

Paul napalminc at gmail.com
Tue Sep 4 19:22:47 EDT 2012


Good day,

I believe I might have found a bug in PhysFS in checking for the
existance of a file whose name it is a substring of another file. In
the following code, I believe that PHYSFS_exists() should return
"true".


$ cat main.c
#include <physfs.h>

int main(int argc, char *argv[])
{
        PHYSFS_init(argv[0]);
        PHYSFS_addToSearchPath("bar.zip", 0);
        return PHYSFS_exists("foo");
}


$ cat build.sh
touch foo
touch foo.a
touch xyz
zip bar.zip foo foo.a xyz
gcc main.c -o main -lphysfs
./main
if [ "$?" -eq "0" ]; then
        echo FAILURE
else
        echo SUCCESS
fi


I have only looked at the ZIP archiver, but this can be fixed to
return the correct value if in zip_find_entry(), when a substring is
matched, "hi" is always modified, "lo" never.


-else if (thispath[pathlen] > '/')
     hi = middle - 1;
-else
-    lo = middle + 1;


I am not sure how this change plays out with the isDir subtleties, and
this change might cause problems with that. I have not thoroughly
tested for anything of the sort.

Also, I have not investigated the other archiver modules to see if
they are similarly affected. It might be worth a check.

Cheers,
Paul Merrill


More information about the physfs mailing list