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

Reply via email to