Skip to content

Commit bdf84c1

Browse files
authored
[291][292] Fix memory safety vulnerabilities in Restart parser (#293)
1 parent 2dec362 commit bdf84c1

1 file changed

Lines changed: 9 additions & 1 deletion

File tree

src/sipnet/restart.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ validateCheckpointBoundaryForLoad(const char *restartIn,
321321
// Assumes input char *dest is BUILD_INFO_BUFFER_SIZE in length
322322
static void sanitizeBuildInfo(char *dest, const char *src) {
323323
size_t ind = 0;
324-
while (src[ind] != '\0' && ind < (BUILD_INFO_BUFFER_SIZE - 1)) {
324+
while (ind < (BUILD_INFO_BUFFER_SIZE - 1) && src[ind] != '\0') {
325325
char c = src[ind];
326326
if (c == ' ' || c == '\t' || c == '\r' || c == '\n') {
327327
dest[ind] = '_';
@@ -655,6 +655,14 @@ static void readRestartState(const char *restartIn, RestartState *state,
655655

656656
fclose(in);
657657

658+
// Validate that the checkpoint file did not attempt to resize the MeanTracker
659+
if (meanNPP->length != meanLength) {
660+
logError("Restart schema mismatch in %s: mean.npp.length (%d) does not "
661+
"match the compiled model length (%d)\n",
662+
restartIn, meanNPP->length, meanLength);
663+
exit(EXIT_CODE_BAD_RESTART_PARAMETER);
664+
}
665+
658666
verifySeenBatch(state->metaPF, NUM_META_FIELDS, restartIn);
659667
verifySeenBatch(state->schemaPF, NUM_SCHEMA_FIELDS, restartIn);
660668
verifySeenBatch(state->flagsPF, NUM_CONTEXT_MODEL_FLAGS, restartIn);

0 commit comments

Comments
 (0)