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; 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) void StringBuilder::appendEscaped(const char* s)

View File

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

View File

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