Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3693)

Unified Diff: base/debug/stack_trace_unittest.cc

Issue 18656004: Added a new SafeSPrintf() function that implements snprintf() in an async-safe-fashion (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed Jeffrey's comments Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/debug/stack_trace_unittest.cc
diff --git a/base/debug/stack_trace_unittest.cc b/base/debug/stack_trace_unittest.cc
index b676327d7a41c820f2937c19557f8ccab73a0071..0b3fff2c9aa5ee9aad7c0aa52b64fa2ef4d4df9a 100644
--- a/base/debug/stack_trace_unittest.cc
+++ b/base/debug/stack_trace_unittest.cc
@@ -6,6 +6,7 @@
#include <sstream>
#include <string>
+#include "base/debug/format.h"
#include "base/debug/stack_trace.h"
#include "base/logging.h"
#include "base/process/kill.h"
@@ -152,76 +153,82 @@ TEST_F(StackTraceTest, AsyncSignalUnsafeSignalHandlerHang) {
namespace {
-std::string itoa_r_wrapper(intptr_t i, size_t sz, int base, size_t padding) {
- char buffer[1024];
+std::string itoa_r(intptr_t i, size_t sz, int base, size_t padding) {
jln (very slow on Chromium) 2013/08/01 00:03:15 I wonder if you shouldn't expose itoa_r() and just
+ // The stack tracer uses Format() to convert integer values to ASCII.
+ // It doesn't need all of the features of Format(), but instead restricts
+ // itself to a subset that can be thought of as an itoa_r() function.
+ char buffer[130];
CHECK_LE(sz, sizeof(buffer));
-
- char* result = internal::itoa_r(i, buffer, sz, base, padding);
- EXPECT_TRUE(result);
+ CHECK_LE(sizeof(intptr_t)*8+1, sizeof(buffer));
+ char format[40];
+ EXPECT_TRUE(base == 10 || base == 16);
+ CHECK_LT(Format(format, "%%0%d%c", padding, base == 10 ? 'd' : 'x'),
+ static_cast<ssize_t>(sizeof(format)));
+ CHECK_LT(FormatN(buffer, sz, format, i),
+ static_cast<ssize_t>(sizeof(buffer)));
return std::string(buffer);
}
} // namespace
TEST_F(StackTraceTest, itoa_r) {
- EXPECT_EQ("0", itoa_r_wrapper(0, 128, 10, 0));
- EXPECT_EQ("-1", itoa_r_wrapper(-1, 128, 10, 0));
+ EXPECT_EQ("0", itoa_r(0, 128, 10, 0));
+ EXPECT_EQ("-1", itoa_r(-1, 128, 10, 0));
// Test edge cases.
if (sizeof(intptr_t) == 4) {
- EXPECT_EQ("ffffffff", itoa_r_wrapper(-1, 128, 16, 0));
+ EXPECT_EQ("ffffffff", itoa_r(-1, 128, 16, 0));
EXPECT_EQ("-2147483648",
- itoa_r_wrapper(std::numeric_limits<intptr_t>::min(), 128, 10, 0));
+ itoa_r(std::numeric_limits<intptr_t>::min(), 128, 10, 0));
EXPECT_EQ("2147483647",
- itoa_r_wrapper(std::numeric_limits<intptr_t>::max(), 128, 10, 0));
+ itoa_r(std::numeric_limits<intptr_t>::max(), 128, 10, 0));
EXPECT_EQ("80000000",
- itoa_r_wrapper(std::numeric_limits<intptr_t>::min(), 128, 16, 0));
+ itoa_r(std::numeric_limits<intptr_t>::min(), 128, 16, 0));
EXPECT_EQ("7fffffff",
- itoa_r_wrapper(std::numeric_limits<intptr_t>::max(), 128, 16, 0));
+ itoa_r(std::numeric_limits<intptr_t>::max(), 128, 16, 0));
} else if (sizeof(intptr_t) == 8) {
- EXPECT_EQ("ffffffffffffffff", itoa_r_wrapper(-1, 128, 16, 0));
+ EXPECT_EQ("ffffffffffffffff", itoa_r(-1, 128, 16, 0));
EXPECT_EQ("-9223372036854775808",
- itoa_r_wrapper(std::numeric_limits<intptr_t>::min(), 128, 10, 0));
+ itoa_r(std::numeric_limits<intptr_t>::min(), 128, 10, 0));
EXPECT_EQ("9223372036854775807",
- itoa_r_wrapper(std::numeric_limits<intptr_t>::max(), 128, 10, 0));
+ itoa_r(std::numeric_limits<intptr_t>::max(), 128, 10, 0));
EXPECT_EQ("8000000000000000",
- itoa_r_wrapper(std::numeric_limits<intptr_t>::min(), 128, 16, 0));
+ itoa_r(std::numeric_limits<intptr_t>::min(), 128, 16, 0));
EXPECT_EQ("7fffffffffffffff",
- itoa_r_wrapper(std::numeric_limits<intptr_t>::max(), 128, 16, 0));
+ itoa_r(std::numeric_limits<intptr_t>::max(), 128, 16, 0));
} else {
ADD_FAILURE() << "Missing test case for your size of intptr_t ("
<< sizeof(intptr_t) << ")";
}
// Test hex output.
- EXPECT_EQ("688", itoa_r_wrapper(0x688, 128, 16, 0));
- EXPECT_EQ("deadbeef", itoa_r_wrapper(0xdeadbeef, 128, 16, 0));
+ EXPECT_EQ("688", itoa_r(0x688, 128, 16, 0));
+ EXPECT_EQ("deadbeef", itoa_r(0xdeadbeef, 128, 16, 0));
// Check that itoa_r respects passed buffer size limit.
- char buffer[1024];
- EXPECT_TRUE(internal::itoa_r(0xdeadbeef, buffer, 10, 16, 0));
- EXPECT_TRUE(internal::itoa_r(0xdeadbeef, buffer, 9, 16, 0));
- EXPECT_FALSE(internal::itoa_r(0xdeadbeef, buffer, 8, 16, 0));
- EXPECT_FALSE(internal::itoa_r(0xdeadbeef, buffer, 7, 16, 0));
- EXPECT_TRUE(internal::itoa_r(0xbeef, buffer, 5, 16, 4));
- EXPECT_FALSE(internal::itoa_r(0xbeef, buffer, 5, 16, 5));
- EXPECT_FALSE(internal::itoa_r(0xbeef, buffer, 5, 16, 6));
+ EXPECT_EQ("deadbeef", itoa_r(0xdeadbeef, 10, 16, 0));
+ EXPECT_EQ("deadbeef", itoa_r(0xdeadbeef, 9, 16, 0));
+ EXPECT_EQ("deadbee", itoa_r(0xdeadbeef, 8, 16, 0));
+ EXPECT_EQ("deadbe", itoa_r(0xdeadbeef, 7, 16, 0));
+ EXPECT_EQ("beef", itoa_r(0xbeef, 5, 16, 4));
+ EXPECT_EQ("0bee", itoa_r(0xbeef, 5, 16, 5));
+ EXPECT_EQ("00be", itoa_r(0xbeef, 5, 16, 6));
// Test padding.
- EXPECT_EQ("1", itoa_r_wrapper(1, 128, 10, 0));
- EXPECT_EQ("1", itoa_r_wrapper(1, 128, 10, 1));
- EXPECT_EQ("01", itoa_r_wrapper(1, 128, 10, 2));
- EXPECT_EQ("001", itoa_r_wrapper(1, 128, 10, 3));
- EXPECT_EQ("0001", itoa_r_wrapper(1, 128, 10, 4));
- EXPECT_EQ("00001", itoa_r_wrapper(1, 128, 10, 5));
- EXPECT_EQ("688", itoa_r_wrapper(0x688, 128, 16, 0));
- EXPECT_EQ("688", itoa_r_wrapper(0x688, 128, 16, 1));
- EXPECT_EQ("688", itoa_r_wrapper(0x688, 128, 16, 2));
- EXPECT_EQ("688", itoa_r_wrapper(0x688, 128, 16, 3));
- EXPECT_EQ("0688", itoa_r_wrapper(0x688, 128, 16, 4));
- EXPECT_EQ("00688", itoa_r_wrapper(0x688, 128, 16, 5));
+ EXPECT_EQ("1", itoa_r(1, 128, 10, 0));
+ EXPECT_EQ("1", itoa_r(1, 128, 10, 1));
+ EXPECT_EQ("01", itoa_r(1, 128, 10, 2));
+ EXPECT_EQ("001", itoa_r(1, 128, 10, 3));
+ EXPECT_EQ("0001", itoa_r(1, 128, 10, 4));
+ EXPECT_EQ("00001", itoa_r(1, 128, 10, 5));
+ EXPECT_EQ("688", itoa_r(0x688, 128, 16, 0));
+ EXPECT_EQ("688", itoa_r(0x688, 128, 16, 1));
+ EXPECT_EQ("688", itoa_r(0x688, 128, 16, 2));
+ EXPECT_EQ("688", itoa_r(0x688, 128, 16, 3));
+ EXPECT_EQ("0688", itoa_r(0x688, 128, 16, 4));
+ EXPECT_EQ("00688", itoa_r(0x688, 128, 16, 5));
}
#endif // defined(OS_POSIX) && !defined(OS_ANDROID)

Powered by Google App Engine
This is Rietveld 408576698