You've already forked pgbackrest
mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-11-06 08:49:29 +02:00
Assert when buffer used is greater than size limit.
099281c5 reduced used but this could lead to surprising behavior so assert instead.
Call bufUsedSet() before bufLimitSet() to avoid the assertion.
This commit is contained in:
@@ -45,6 +45,17 @@
|
||||
|
||||
<p>Optimize small reads in <code>IoRead</code>.</p>
|
||||
</release-item>
|
||||
|
||||
<release-item>
|
||||
<commit subject="Reduce buffer used when size limit set."/>
|
||||
<commit subject="Assert when buffer used is greater than size limit."/>
|
||||
|
||||
<release-item-contributor-list>
|
||||
<release-item-reviewer id="cynthia.shang"/>
|
||||
</release-item-contributor-list>
|
||||
|
||||
<p>Assert when buffer used is greater than size limit.</p>
|
||||
</release-item>
|
||||
</release-development-list>
|
||||
</release-core-list>
|
||||
</release>
|
||||
|
||||
@@ -295,14 +295,11 @@ bufLimitSet(Buffer *this, size_t limit)
|
||||
|
||||
ASSERT(this != NULL);
|
||||
ASSERT(limit <= this->sizeAlloc);
|
||||
ASSERT(limit >= this->used);
|
||||
|
||||
this->size = limit;
|
||||
this->sizeLimit = true;
|
||||
|
||||
// Reduce used if it is now larger than size
|
||||
if (this->used > this->size)
|
||||
this->used = this->size;
|
||||
|
||||
FUNCTION_TEST_RETURN_VOID();
|
||||
}
|
||||
|
||||
|
||||
@@ -91,13 +91,17 @@ testRun(void)
|
||||
|
||||
TEST_RESULT_INT(sameTotal, 128, "original bytes match");
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
TEST_TITLE("error when used > new limit");
|
||||
|
||||
TEST_ERROR(bufLimitSet(buffer, 64), AssertError, "assertion 'limit >= this->used' failed");
|
||||
TEST_RESULT_VOID(bufUsedSet(buffer, 64), "set used");
|
||||
|
||||
// Use limits to change size reporting
|
||||
TEST_RESULT_VOID(bufLimitSet(buffer, 64), "set limit");
|
||||
TEST_RESULT_UINT(bufSize(buffer), 64, " check limited size");
|
||||
TEST_RESULT_UINT(bufUsed(buffer), 64, " check used");
|
||||
TEST_RESULT_VOID(bufLimitClear(buffer), " clear limit");
|
||||
TEST_RESULT_UINT(bufSize(buffer), 128, " check unlimited size");
|
||||
TEST_RESULT_UINT(bufUsed(buffer), 64, " check used did not change");
|
||||
|
||||
// Resize to zero buffer
|
||||
TEST_RESULT_VOID(bufUsedZero(buffer), "set used to 0");
|
||||
|
||||
Reference in New Issue
Block a user