Added a test that appends a string longer that the capacity of the builder

This commit is contained in:
Benoît Blanchon
2014-06-26 13:00:14 +02:00
parent ca99749f28
commit 7ab728e996
3 changed files with 15 additions and 6 deletions

View File

@ -10,9 +10,12 @@ void StringBuilder::append(const char* s)
{
char* tail = buffer + length;
strncpy(tail, s, capacity - length);
while (*s && length<capacity)
{
buffer[length++] = *s++;
}
length += strlen(tail);
buffer[length] = 0;
}
void StringBuilder::appendEscaped(const char* s)
@ -24,7 +27,7 @@ void StringBuilder::appendEscaped(const char* s)
// keep one slot for the end quote
capacity--;
while (*s && length<capacity)
while (*s && length < capacity)
{
switch (*s)
{

View File

@ -13,7 +13,7 @@ class StringBuilder
{
public:
StringBuilder(char* buf, size_t size)
: buffer(buf), capacity(size), length(0)
: buffer(buf), capacity(size-1), length(0)
{
buffer[0] = 0;
}
@ -24,7 +24,7 @@ public:
private:
char* buffer;
int capacity;
int length;
size_t capacity;
size_t length;
};

View File

@ -42,6 +42,12 @@ namespace JsonGeneratorTests
assertResultIs("ABCDEFGH");
}
TEST_METHOD(AppendOverCapacity)
{
append("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
assertResultIs("ABCDEFGHIJKLMNO");
}
TEST_METHOD(AppendSpecialChars)
{
append("\\\"\/\b\f\n\r");