Reviewers: Michael Starzinger,
Message:
landed
http://codereview.chromium.org/10173023/diff/1/src/hydrogen.cc
File src/hydrogen.cc (right):
http://codereview.chromium.org/10173023/diff/1/src/hydrogen.cc#newcode1634
src/hydrogen.cc:1634: if (string_len > sizeof(underlying_buffer)) {
On 2012/04/25 13:09:53, Michael Starzinger wrote:
I think this condition can never be true. Can we drop this block (or
at least
make it an assertion)?
Done.
Description:
Use safe string utilities to fix Windows build error.
[email protected]
TEST=waterfall goes green
Committed: https://code.google.com/p/v8/source/detail?r=11434
Please review this at http://codereview.chromium.org/10173023/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/hydrogen.cc
Index: src/hydrogen.cc
diff --git a/src/hydrogen.cc b/src/hydrogen.cc
index
fd4eec3ab5ae3674c63aeeb08fd8c419f44e7a8b..72a61a13889499de2ce7af8d3a2d243f559c0a51
100644
--- a/src/hydrogen.cc
+++ b/src/hydrogen.cc
@@ -1553,8 +1553,10 @@ void HGlobalValueNumberer::ComputeBlockSideEffects()
{
SmartArrayPointer<char> GetGVNFlagsString(GVNFlagSet flags) {
+ char underlying_buffer[kLastFlag * 128];
+ Vector<char> buffer(underlying_buffer, sizeof(underlying_buffer));
#if DEBUG
- char buffer[kLastFlag * 128];
+ int offset = 0;
const char* separator = "";
const char* comma = ", ";
buffer[0] = 0;
@@ -1573,18 +1575,18 @@ SmartArrayPointer<char>
GetGVNFlagsString(GVNFlagSet flags) {
bool positive_depends_on = set_depends_on < (kLastFlag / 2);
if (set_changes > 0) {
if (positive_changes) {
- strcat(buffer, "changes [");
+ offset += OS::SNPrintF(buffer + offset, "changes [");
} else {
- strcat(buffer, "changes all except [");
+ offset += OS::SNPrintF(buffer + offset, "changes all except [");
}
for (int bit = 0; bit < kLastFlag; ++bit) {
if (((flags.ToIntegral() & (1 << bit)) != 0) == positive_changes) {
switch (static_cast<GVNFlag>(bit)) {
-#define DECLARE_FLAG(type) \
- case kChanges##type: \
- strcat(buffer, separator); \
- strcat(buffer, #type); \
- separator = comma; \
+#define DECLARE_FLAG(type) \
+ case kChanges##type: \
+ offset += OS::SNPrintF(buffer + offset, separator); \
+ offset += OS::SNPrintF(buffer + offset, #type); \
+ separator = comma; \
break;
GVN_TRACKED_FLAG_LIST(DECLARE_FLAG)
GVN_UNTRACKED_FLAG_LIST(DECLARE_FLAG)
@@ -1594,26 +1596,26 @@ GVN_UNTRACKED_FLAG_LIST(DECLARE_FLAG)
}
}
}
- strcat(buffer, "]");
+ offset += OS::SNPrintF(buffer + offset, "]");
}
if (set_depends_on > 0) {
separator = "";
if (set_changes > 0) {
- strcat(buffer, ", ");
+ offset += OS::SNPrintF(buffer + offset, ", ");
}
if (positive_depends_on) {
- strcat(buffer, "depends on [");
+ offset += OS::SNPrintF(buffer + offset, "depends on [");
} else {
- strcat(buffer, "depends on all except [");
+ offset += OS::SNPrintF(buffer + offset, "depends on all except [");
}
for (int bit = 0; bit < kLastFlag; ++bit) {
if (((flags.ToIntegral() & (1 << bit)) != 0) == positive_depends_on)
{
switch (static_cast<GVNFlag>(bit)) {
-#define DECLARE_FLAG(type) \
- case kDependsOn##type: \
- strcat(buffer, separator); \
- strcat(buffer, #type); \
- separator = comma; \
+#define DECLARE_FLAG(type) \
+ case kDependsOn##type: \
+ offset += OS::SNPrintF(buffer + offset, separator); \
+ offset += OS::SNPrintF(buffer + offset, #type); \
+ separator = comma; \
break;
GVN_TRACKED_FLAG_LIST(DECLARE_FLAG)
GVN_UNTRACKED_FLAG_LIST(DECLARE_FLAG)
@@ -1623,14 +1625,15 @@ GVN_UNTRACKED_FLAG_LIST(DECLARE_FLAG)
}
}
}
- strcat(buffer, "]");
+ offset += OS::SNPrintF(buffer + offset, "]");
}
#else
- char buffer[128];
- snprintf(buffer, 128, "0x%08X", flags.ToIntegral());
+ OS::SNPrintF(buffer, "0x%08X", flags.ToIntegral());
#endif
- char* result = new char[strlen(buffer) + 1];
- strcpy(result, buffer);
+ uint32_t string_len = strlen(underlying_buffer) + 1;
+ ASSERT(string_len <= sizeof(underlying_buffer));
+ char* result = new char[strlen(underlying_buffer) + 1];
+ memcpy(result, underlying_buffer, string_len);
return SmartArrayPointer<char>(result);
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev