You've already forked pgbackrest
mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-07-13 01:00:23 +02:00
Fix potential buffer overrun in error message handling.
Reported by Lætitia.
This commit is contained in:
@ -14,6 +14,16 @@
|
|||||||
<release-list>
|
<release-list>
|
||||||
<release date="XXXX-XX-XX" version="2.03dev" title="UNDER DEVELOPMENT">
|
<release date="XXXX-XX-XX" version="2.03dev" title="UNDER DEVELOPMENT">
|
||||||
<release-core-list>
|
<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-improvement-list>
|
||||||
<release-item>
|
<release-item>
|
||||||
<release-item-contributor-list>
|
<release-item-contributor-list>
|
||||||
|
@ -387,7 +387,9 @@ errorInternalThrow(const ErrorType *errorType, const char *fileName, const char
|
|||||||
errorContext.error.fileLine = fileLine;
|
errorContext.error.fileLine = fileLine;
|
||||||
|
|
||||||
// Assign message to the error
|
// Assign message to the error
|
||||||
strcpy(messageBuffer, message);
|
strncpy(messageBuffer, message, sizeof(messageBuffer));
|
||||||
|
messageBuffer[sizeof(messageBuffer) - 1] = 0;
|
||||||
|
|
||||||
errorContext.error.message = (const char *)messageBuffer;
|
errorContext.error.message = (const char *)messageBuffer;
|
||||||
|
|
||||||
// Generate the stack trace for the error
|
// Generate the stack trace for the error
|
||||||
|
@ -122,7 +122,10 @@ testRun()
|
|||||||
assert(errorTryDepth() == 4);
|
assert(errorTryDepth() == 4);
|
||||||
tryDone = true;
|
tryDone = true;
|
||||||
|
|
||||||
THROW(AssertError, BOGUS_STR);
|
char bigMessage[sizeof(messageBuffer) * 32];
|
||||||
|
memset(bigMessage, 'A', sizeof(bigMessage));
|
||||||
|
|
||||||
|
THROW(AssertError, bigMessage);
|
||||||
}
|
}
|
||||||
TRY_END();
|
TRY_END();
|
||||||
}
|
}
|
||||||
@ -151,6 +154,7 @@ testRun()
|
|||||||
{
|
{
|
||||||
assert(errorTryDepth() == 1);
|
assert(errorTryDepth() == 1);
|
||||||
assert(errorContext.tryList[1].state == errorStateCatch);
|
assert(errorContext.tryList[1].state == errorStateCatch);
|
||||||
|
assert(strlen(errorMessage()) == sizeof(messageBuffer) - 1);
|
||||||
|
|
||||||
catchDone = true;
|
catchDone = true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user