Make the assumption on the minimum buffer size for GetLogLines explicit.
authormikhail.naganov@gmail.com <mikhail.naganov@gmail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 11 Mar 2010 09:48:01 +0000 (09:48 +0000)
committermikhail.naganov@gmail.com <mikhail.naganov@gmail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 11 Mar 2010 09:48:01 +0000 (09:48 +0000)
Review URL: http://codereview.chromium.org/799008

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4097 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

include/v8.h
src/api.cc
src/log-utils.cc
src/log-utils.h
test/cctest/test-log.cc

index 882eeddf153c1896e8c19a5c336c2f68b3e708b7..bed86cabd07b52aa29740f302f30c0b106bc8ba4 100644 (file)
@@ -2421,6 +2421,14 @@ class V8EXPORT V8 {
    */
   static int GetLogLines(int from_pos, char* dest_buf, int max_size);
 
+  /**
+   * The minimum allowed size for a log lines buffer.  If the size of
+   * the buffer given will not be enough to hold a line of the maximum
+   * length, an attempt to find a log line end in GetLogLines will
+   * fail, and an empty result will be returned.
+   */
+  static const int kMinimumSizeForLogLinesBuffer = 2048;
+
   /**
    * Retrieve the V8 thread id of the calling thread.
    *
index 93fce79bdfacdf50293e1c30ee5572403187dfc5..af2e7ad243a6952faea1b434c8fc668e60eb836c 100644 (file)
@@ -3580,6 +3580,7 @@ int V8::GetActiveProfilerModules() {
 
 int V8::GetLogLines(int from_pos, char* dest_buf, int max_size) {
 #ifdef ENABLE_LOGGING_AND_PROFILING
+  ASSERT(max_size >= kMinimumSizeForLogLinesBuffer);
   return i::Logger::GetLogLines(from_pos, dest_buf, max_size);
 #endif
   return 0;
index 722e0fc042ab4ed52b7b6af20507d2dbafaac90e..62f0ca62f41300ac71073034a2291f71738e87ed 100644 (file)
@@ -196,6 +196,9 @@ int Log::GetLogLines(int from_pos, char* dest_buf, int max_size) {
   char* end_pos = dest_buf + actual_size - 1;
   while (end_pos >= dest_buf && *end_pos != '\n') --end_pos;
   actual_size = static_cast<int>(end_pos - dest_buf + 1);
+  // If the assertion below is hit, it means that there was no line end
+  // found --- something wrong has happened.
+  ASSERT(actual_size > 0);
   ASSERT(actual_size <= max_size);
   return actual_size;
 }
index b769e9046f21d12b0ec49a040fd63253350e8811..8889f1b77a30b17f9e7ae3802a2ffeeb350c71e9 100644 (file)
@@ -115,7 +115,7 @@ class Log : public AllStatic {
   }
 
   // Size of buffer used for formatting log messages.
-  static const int kMessageBufferSize = 2048;
+  static const int kMessageBufferSize = v8::V8::kMinimumSizeForLogLinesBuffer;
 
  private:
   typedef int (*WritePtr)(const char* msg, int length);
index 4c5101c279bf9b833c783ce562e1c5013e28d803..33a28b8987c0a4ee0992dd09717d0c11b6675b57 100644 (file)
@@ -52,13 +52,9 @@ TEST(GetMessages) {
   CHECK_EQ(0, Logger::GetLogLines(0, NULL, 0));
   char log_lines[100];
   memset(log_lines, 0, sizeof(log_lines));
-  // Requesting data size which is smaller than first log message length.
-  CHECK_EQ(0, Logger::GetLogLines(0, log_lines, 3));
   // See Logger::StringEvent.
   const char* line_1 = "aaa,\"bbb\"\n";
   const int line_1_len = StrLength(line_1);
-  // Still smaller than log message length.
-  CHECK_EQ(0, Logger::GetLogLines(0, log_lines, line_1_len - 1));
   // The exact size.
   CHECK_EQ(line_1_len, Logger::GetLogLines(0, log_lines, line_1_len));
   CHECK_EQ(line_1, log_lines);
@@ -72,8 +68,6 @@ TEST(GetMessages) {
   const int line_2_len = StrLength(line_2);
   // Now start with line_2 beginning.
   CHECK_EQ(0, Logger::GetLogLines(line_1_len, log_lines, 0));
-  CHECK_EQ(0, Logger::GetLogLines(line_1_len, log_lines, 3));
-  CHECK_EQ(0, Logger::GetLogLines(line_1_len, log_lines, line_2_len - 1));
   CHECK_EQ(line_2_len, Logger::GetLogLines(line_1_len, log_lines, line_2_len));
   CHECK_EQ(line_2, log_lines);
   memset(log_lines, 0, sizeof(log_lines));