Chromium Code Reviews| Index: src/core/SkString.cpp |
| diff --git a/src/core/SkString.cpp b/src/core/SkString.cpp |
| index 48459dbbd8ac69eabb6f2f72cbbf1c9ff862e7f5..1981a69bbe96f1bb073a0a8846ac5c833bb28e56 100644 |
| --- a/src/core/SkString.cpp |
| +++ b/src/core/SkString.cpp |
| @@ -26,12 +26,13 @@ static const size_t kBufferSize = 1024; |
| #define SNPRINTF snprintf |
| #endif |
| -#define ARGS_TO_BUFFER(format, buffer, size) \ |
| - do { \ |
| - va_list args; \ |
| - va_start(args, format); \ |
| - VSNPRINTF(buffer, size, format, args); \ |
| - va_end(args); \ |
| +#define ARGS_TO_BUFFER(format, buffer, size, written) \ |
| + do { \ |
| + va_list args; \ |
| + va_start(args, format); \ |
| + written = VSNPRINTF(buffer, size, format, args); \ |
| + SkASSERT(written >= 0 && written < SkToInt(size)); \ |
| + va_end(args); \ |
| } while (0) |
| /////////////////////////////////////////////////////////////////////////////// |
| @@ -557,37 +558,45 @@ void SkString::insertScalar(size_t offset, SkScalar value) { |
| void SkString::printf(const char format[], ...) { |
| char buffer[kBufferSize]; |
| - ARGS_TO_BUFFER(format, buffer, kBufferSize); |
| + int length; |
| + ARGS_TO_BUFFER(format, buffer, kBufferSize, length); |
| + SkASSERT(length >= 0); |
|
joshualitt
2014/10/23 23:16:37
whoops I can remove these, will update the patch
|
| - this->set(buffer, strlen(buffer)); |
| + this->set(buffer, length); |
| } |
| void SkString::appendf(const char format[], ...) { |
| char buffer[kBufferSize]; |
| - ARGS_TO_BUFFER(format, buffer, kBufferSize); |
| + int length; |
| + ARGS_TO_BUFFER(format, buffer, kBufferSize, length); |
| + SkASSERT(length >= 0); |
| - this->append(buffer, strlen(buffer)); |
| + this->append(buffer, length); |
| } |
| void SkString::appendVAList(const char format[], va_list args) { |
| char buffer[kBufferSize]; |
| - VSNPRINTF(buffer, kBufferSize, format, args); |
| + int length = VSNPRINTF(buffer, kBufferSize, format, args); |
| + SkASSERT(length >= 0); |
| - this->append(buffer, strlen(buffer)); |
| + this->append(buffer, length); |
| } |
| void SkString::prependf(const char format[], ...) { |
| char buffer[kBufferSize]; |
| - ARGS_TO_BUFFER(format, buffer, kBufferSize); |
| + int length; |
| + ARGS_TO_BUFFER(format, buffer, kBufferSize, length); |
| + SkASSERT(length >= 0); |
| - this->prepend(buffer, strlen(buffer)); |
| + this->prepend(buffer, length); |
| } |
| void SkString::prependVAList(const char format[], va_list args) { |
| char buffer[kBufferSize]; |
| - VSNPRINTF(buffer, kBufferSize, format, args); |
| + int length = VSNPRINTF(buffer, kBufferSize, format, args); |
| + SkASSERT(length >= 0); |
| - this->prepend(buffer, strlen(buffer)); |
| + this->prepend(buffer, length); |
| } |
| @@ -635,7 +644,8 @@ void SkString::swap(SkString& other) { |
| SkString SkStringPrintf(const char* format, ...) { |
| SkString formattedOutput; |
| char buffer[kBufferSize]; |
| - ARGS_TO_BUFFER(format, buffer, kBufferSize); |
| + SK_UNUSED int length; |
| + ARGS_TO_BUFFER(format, buffer, kBufferSize, length); |
| formattedOutput.set(buffer); |
| return formattedOutput; |
| } |