gdraheim / zziplib

The ZZIPlib provides read access on ZIP-archives and unpacked data. It features an additional simplified API following the standard Posix API for file access
Other
62 stars 50 forks source link

Incorrect check for file descriptor validity can cause files to fail to open #67

Open amaurea opened 5 years ago

amaurea commented 5 years ago

Line 191 in file.c checks whether a file descriptor is valid, like this:

if (! dir->fd || dir->fd == -1)

This treats a file descriptor of 0 as a failure, but 0 is a fully valid file descriptor that can be returned from open. This caused mysterious problems opening files for me yesterday, so it's not just a theoretical issue. Usually a file descriptor of 0 is not encountered because it's taken up by standard input, so I guess that's why this has gone unnoticed, but on the supercomputer I ran this on (with intel compiler 19.0 and intel-mpi 2019.1), 0 was only reserved (presumably for standard input) on the root mpi task. For the others 0 was unallocated, and ended up being returned by open in zzip, causing file opens to fail for all mpi tasks except the root task.

Changing the line to

if(dir->fd == -1)

fixed the problem. I did not notice any side effects.