From 2778e48d18a720ec2f94343dc4ca8c335874877d Mon Sep 17 00:00:00 2001 From: Andrey Nazarov Date: Fri, 11 Jun 2010 22:13:56 +0000 Subject: Skip empty files/directories when loading ZIP archives. --- source/files.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'source/files.c') diff --git a/source/files.c b/source/files.c index d238cb2..e2e34f9 100644 --- a/source/files.c +++ b/source/files.c @@ -1408,11 +1408,13 @@ static pack_t *FS_LoadZipFile( const char *packfile ) { goto fail; } - namesLength += strlen( name ) + 1; + // skip directories and empty files + if( zInfo.uncompressed_size ) { + namesLength += strlen( name ) + 1; + } if( i != numFiles - 1 && unzGoToNextFile( zFile ) != UNZ_OK ) { Com_WPrintf( "unzGoToNextFile() failed on %s\n", packfile ); - } } @@ -1443,18 +1445,20 @@ static pack_t *FS_LoadZipFile( const char *packfile ) { for( i = 0, file = pack->files; i < numFiles; i++, file++ ) { unzGetCurrentFileInfo( zFile, &zInfo, name, sizeof( name ), NULL, 0, NULL, 0 ); - len = strlen( name ) + 1; - file->name = names; + if( zInfo.uncompressed_size ) { + len = strlen( name ) + 1; + file->name = names; - strcpy( file->name, name ); - file->filepos = unzGetCurrentFileInfoPosition( zFile ); - file->filelen = zInfo.uncompressed_size; + strcpy( file->name, name ); + file->filepos = unzGetCurrentFileInfoPosition( zFile ); + file->filelen = zInfo.uncompressed_size; - hash = Com_HashPath( file->name, hashSize ); - file->hashNext = pack->fileHash[hash]; - pack->fileHash[hash] = file; + hash = Com_HashPath( file->name, hashSize ); + file->hashNext = pack->fileHash[hash]; + pack->fileHash[hash] = file; - names += len; + names += len; + } if( i != numFiles - 1 ) { unzGoToNextFile( zFile ); -- cgit v1.2.3