Skip to content

Commit

Permalink
Fix potential buffer overrun in error message handling.
Browse files Browse the repository at this point in the history
Reported by Lætitia.
  • Loading branch information
dwsteele committed May 21, 2018
1 parent 72a9684 commit e69d5fb
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
10 changes: 10 additions & 0 deletions doc/xml/release.xml
Expand Up @@ -14,6 +14,16 @@
<release-list>
<release date="XXXX-XX-XX" version="2.03dev" title="UNDER DEVELOPMENT">
<release-core-list>
<release-bug-list>
<release-item>
<release-item-contributor-list>
<release-item-ideator id="loxo.lætitia"/>
</release-item-contributor-list>

<p>Fix potential buffer overrun in error message handling.</p>
</release-item>
</release-bug-list>

<release-improvement-list>
<release-item>
<release-item-contributor-list>
Expand Down
4 changes: 3 additions & 1 deletion src/common/error.c
Expand Up @@ -387,7 +387,9 @@ errorInternalThrow(const ErrorType *errorType, const char *fileName, const char
errorContext.error.fileLine = fileLine;

// Assign message to the error
strcpy(messageBuffer, message);
strncpy(messageBuffer, message, sizeof(messageBuffer));
messageBuffer[sizeof(messageBuffer) - 1] = 0;

errorContext.error.message = (const char *)messageBuffer;

// Generate the stack trace for the error
Expand Down
6 changes: 5 additions & 1 deletion test/src/module/common/errorTest.c
Expand Up @@ -122,7 +122,10 @@ testRun()
assert(errorTryDepth() == 4);
tryDone = true;

THROW(AssertError, BOGUS_STR);
char bigMessage[sizeof(messageBuffer) * 32];
memset(bigMessage, 'A', sizeof(bigMessage));

THROW(AssertError, bigMessage);
}
TRY_END();
}
Expand Down Expand Up @@ -151,6 +154,7 @@ testRun()
{
assert(errorTryDepth() == 1);
assert(errorContext.tryList[1].state == errorStateCatch);
assert(strlen(errorMessage()) == sizeof(messageBuffer) - 1);

catchDone = true;
}
Expand Down

0 comments on commit e69d5fb

Please sign in to comment.