BUG: Fix memory leak in libtar's kwReadDir. Use a static buffer like readdir (probably) does rather than malloc-ing a block which never gets free-d.

This commit is contained in:
David Cole 2006-02-02 15:53:31 -05:00
parent 9dd1633a98
commit 4c0668b7da
1 changed files with 11 additions and 4 deletions

View File

@ -54,19 +54,26 @@ kwDirectory * kwOpenDir(const char* name)
kwDirEntry * kwReadDir(kwDirectory * dir)
{
kwDirEntry * entry;
static kwDirEntry entry;
if(!dir || dir->EOD ==1)
{
return NULL;
}
entry = (kwDirEntry*)malloc(sizeof(kwDirEntry));
strncpy(entry->d_name,dir->Entry.name,TAR_MAXPATHLEN-1);
strncpy(entry.d_name,dir->Entry.name,TAR_MAXPATHLEN-1);
if(_findnext(dir->SrchHandle, &dir->Entry) == -1)
{
dir->EOD=1;
}
return entry;
// It is both stupid and dangerous to return a pointer to a static like this.
// This can only be called by one caller at a time: i.e., it's not thread safe.
// On the other hand, it mimics the documented behavior of "readdir" which is
// what it's implemented to replace for platforms that do not have readdir.
// Memory leaks are also stupid and dangerous... perhaps this is less so.
//
return &entry;
}
int kwCloseDir(kwDirectory * dir)
{
int r=-1;