Skip to content

Commit

Permalink
levParse: Do not add levels with errors to psLevels
Browse files Browse the repository at this point in the history
  • Loading branch information
past-due authored and pull[bot] committed Jun 27, 2024
1 parent b281ea7 commit 1098750
Showing 1 changed file with 28 additions and 1 deletion.
29 changes: 28 additions & 1 deletion src/levels.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,13 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
case LTK_MKEEP_LIMBO:
if (state == LP_START || state == LP_WAITDATA)
{
if (psDataSet)
{
// push the previous level onto the level list
psLevels.push_back(psDataSet);
psDataSet = nullptr;
}

// start a new level data set
psDataSet = (LEVEL_DATASET *)malloc(sizeof(LEVEL_DATASET));
if (!psDataSet)
Expand All @@ -414,7 +421,6 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
psDataSet->dataDir = pathMode;
psDataSet->realFileName = realFileName != nullptr ? strdup(realFileName) : nullptr;
psDataSet->realFileHash.setZero(); // The hash is only calculated on demand; for example, if the map name matches.
psLevels.push_back(psDataSet);
currData = 0;

// set the dataset type
Expand Down Expand Up @@ -458,6 +464,7 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
else
{
lev_error("Syntax Error");
if (psDataSet) { free(psDataSet); }
return false;
}
state = LP_LEVEL;
Expand All @@ -471,6 +478,7 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
else
{
lev_error("Syntax Error");
if (psDataSet) { free(psDataSet); }
return false;
}
break;
Expand All @@ -482,6 +490,7 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
else
{
lev_error("Syntax Error");
if (psDataSet) { free(psDataSet); }
return false;
}
break;
Expand All @@ -495,6 +504,7 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
if (levVal < LEVEL_TYPE::LDS_MULTI_TYPE_START)
{
lev_error("invalid type number");
if (psDataSet) { free(psDataSet); }
return false;
}

Expand All @@ -503,6 +513,7 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
else
{
lev_error("Syntax Error");
if (psDataSet) { free(psDataSet); }
return false;
}
state = LP_LEVELDONE;
Expand All @@ -515,6 +526,7 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
else
{
lev_error("Syntax Error");
if (psDataSet) { free(psDataSet); }
return false;
}
break;
Expand All @@ -535,13 +547,15 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
)
{
lev_error("Missing dataset command");
if (psDataSet) { free(psDataSet); }
return false;
}
state = LP_DATA;
}
else
{
lev_error("Syntax Error");
if (psDataSet) { free(psDataSet); }
return false;
}
break;
Expand All @@ -554,6 +568,7 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
else
{
lev_error("Syntax Error");
if (psDataSet) { free(psDataSet); }
return false;
}
break;
Expand All @@ -568,12 +583,14 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
if (psFoundData == nullptr)
{
lev_error("Cannot find full data set for camchange");
if (psDataSet) { free(psDataSet); }
return false;
}

if (psFoundData->type != LEVEL_TYPE::LDS_CAMSTART)
{
lev_error("Invalid data set name for cam change");
if (psDataSet) { free(psDataSet); }
return false;
}
psFoundData->psChange = psDataSet;
Expand All @@ -597,13 +614,15 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
if (psDataSet->psBaseData == nullptr)
{
lev_error("Unknown dataset");
if (psDataSet) { free(psDataSet); }
return false;
}
state = LP_WAITDATA;
}
else
{
lev_error("Syntax Error");
if (psDataSet) { free(psDataSet); }
return false;
}
break;
Expand All @@ -613,6 +632,7 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
if (currData >= LEVEL_MAXFILES)
{
lev_error("Too many data files");
if (psDataSet) { free(psDataSet); }
return false;
}

Expand All @@ -638,6 +658,7 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
else
{
lev_error("Syntax Error");
if (psDataSet) { free(psDataSet); }
return false;
}
break;
Expand All @@ -656,6 +677,12 @@ bool levParse(const char *buffer, size_t size, searchPathMode pathMode, bool ign
return false;
}

if (psDataSet)
{
psLevels.push_back(psDataSet);
psDataSet = nullptr;
}

return true;
}

Expand Down

0 comments on commit 1098750

Please sign in to comment.