mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-23 04:52:07 +00:00
dynamically allocate buffer for PAK
This commit is contained in:
parent
841076f2a9
commit
3e039d1cbd
1 changed files with 22 additions and 8 deletions
|
@ -701,7 +701,7 @@ FS_LoadPAK(const char *packPath)
|
||||||
fsPackFile_t *files; /* List of files in PAK. */
|
fsPackFile_t *files; /* List of files in PAK. */
|
||||||
fsPack_t *pack; /* PAK file. */
|
fsPack_t *pack; /* PAK file. */
|
||||||
dpackheader_t header; /* PAK file header. */
|
dpackheader_t header; /* PAK file header. */
|
||||||
dpackfile_t info[MAX_FILES_IN_PACK]; /* PAK info. */
|
dpackfile_t *info = NULL; /* PAK info. */
|
||||||
|
|
||||||
handle = Q_fopen(packPath, "rb");
|
handle = Q_fopen(packPath, "rb");
|
||||||
|
|
||||||
|
@ -715,7 +715,7 @@ FS_LoadPAK(const char *packPath)
|
||||||
if (LittleLong(header.ident) != IDPAKHEADER)
|
if (LittleLong(header.ident) != IDPAKHEADER)
|
||||||
{
|
{
|
||||||
fclose(handle);
|
fclose(handle);
|
||||||
Com_Error(ERR_FATAL, "FS_LoadPAK: '%s' is not a pack file", packPath);
|
Com_Error(ERR_FATAL, "%s: '%s' is not a pack file", __func__, packPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
header.dirofs = LittleLong(header.dirofs);
|
header.dirofs = LittleLong(header.dirofs);
|
||||||
|
@ -723,11 +723,24 @@ FS_LoadPAK(const char *packPath)
|
||||||
|
|
||||||
numFiles = header.dirlen / sizeof(dpackfile_t);
|
numFiles = header.dirlen / sizeof(dpackfile_t);
|
||||||
|
|
||||||
if ((numFiles > MAX_FILES_IN_PACK) || (numFiles == 0))
|
if ((numFiles == 0) || (header.dirlen < 0) || (header.dirofs < 0))
|
||||||
{
|
{
|
||||||
fclose(handle);
|
fclose(handle);
|
||||||
Com_Error(ERR_FATAL, "FS_LoadPAK: '%s' has %i files",
|
Com_Error(ERR_FATAL, "%s: '%s' is too short.",
|
||||||
packPath, numFiles);
|
__func__, packPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (numFiles > MAX_FILES_IN_PACK)
|
||||||
|
{
|
||||||
|
Com_Printf("%s: '%s' has %i > %i files\n",
|
||||||
|
__func__, packPath, numFiles, MAX_FILES_IN_PACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
info = malloc(header.dirlen);
|
||||||
|
if (!info)
|
||||||
|
{
|
||||||
|
Com_Error(ERR_FATAL, "%s: '%s' is to big for read %d",
|
||||||
|
__func__, packPath, header.dirlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
files = Z_Malloc(numFiles * sizeof(fsPackFile_t));
|
files = Z_Malloc(numFiles * sizeof(fsPackFile_t));
|
||||||
|
@ -742,6 +755,7 @@ FS_LoadPAK(const char *packPath)
|
||||||
files[i].offset = LittleLong(info[i].filepos);
|
files[i].offset = LittleLong(info[i].filepos);
|
||||||
files[i].size = LittleLong(info[i].filelen);
|
files[i].size = LittleLong(info[i].filelen);
|
||||||
}
|
}
|
||||||
|
free(info);
|
||||||
|
|
||||||
pack = Z_Malloc(sizeof(fsPack_t));
|
pack = Z_Malloc(sizeof(fsPack_t));
|
||||||
Q_strlcpy(pack->name, packPath, sizeof(pack->name));
|
Q_strlcpy(pack->name, packPath, sizeof(pack->name));
|
||||||
|
@ -793,11 +807,11 @@ FS_LoadPK3(const char *packPath)
|
||||||
|
|
||||||
numFiles = global.number_entry;
|
numFiles = global.number_entry;
|
||||||
|
|
||||||
if ((numFiles > MAX_FILES_IN_PACK) || (numFiles == 0))
|
if (numFiles <= 0)
|
||||||
{
|
{
|
||||||
unzClose(handle);
|
unzClose(handle);
|
||||||
Com_Error(ERR_FATAL, "FS_LoadPK3: '%s' has %i files",
|
Com_Error(ERR_FATAL, "%s: '%s' has %i files",
|
||||||
packPath, numFiles);
|
__func__, packPath, numFiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
files = Z_Malloc(numFiles * sizeof(fsPackFile_t));
|
files = Z_Malloc(numFiles * sizeof(fsPackFile_t));
|
||||||
|
|
Loading…
Reference in a new issue