Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e5a8d0ea authored by Christopher Ferris's avatar Christopher Ferris Committed by Automerger Merge Worker
Browse files

Limit the number of log messages in a tombstone. am: 7003fba5

parents 0765d1db 7003fba5
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
@@ -2759,3 +2759,48 @@ TEST_F(CrasherTest, logd_skips_reading_logs_not_main_thread) {
  ASSERT_BACKTRACE_FRAME(result, "raise_debugger_signal");
  ASSERT_NOT_MATCH(result, kLogMessage);
}

// Disable this test since there is a high liklihood that this would
// be flaky since it requires 500 messages being in the log.
TEST_F(CrasherTest, DISABLED_max_log_messages) {
  StartProcess([]() {
    for (size_t i = 0; i < 600; i++) {
      LOG(INFO) << "Message number " << i;
    }
    abort();
  });

  unique_fd output_fd;
  StartIntercept(&output_fd);
  FinishCrasher();
  AssertDeath(SIGABRT);
  int intercept_result;
  FinishIntercept(&intercept_result);
  ASSERT_EQ(1, intercept_result) << "tombstoned reported failure";

  std::string result;
  ConsumeFd(std::move(output_fd), &result);
  ASSERT_NOT_MATCH(result, "Message number 99");
  ASSERT_MATCH(result, "Message number 100");
  ASSERT_MATCH(result, "Message number 599");
}

TEST_F(CrasherTest, log_with_newline) {
  StartProcess([]() {
    LOG(INFO) << "This line has a newline.\nThis is on the next line.";
    abort();
  });

  unique_fd output_fd;
  StartIntercept(&output_fd);
  FinishCrasher();
  AssertDeath(SIGABRT);
  int intercept_result;
  FinishIntercept(&intercept_result);
  ASSERT_EQ(1, intercept_result) << "tombstoned reported failure";

  std::string result;
  ConsumeFd(std::move(output_fd), &result);
  ASSERT_MATCH(result, ":\\s*This line has a newline.");
  ASSERT_MATCH(result, ":\\s*This is on the next line.");
}
+5 −2
Original line number Diff line number Diff line
@@ -70,6 +70,9 @@

using android::base::StringPrintf;

// The maximum number of messages to save in the protobuf per file.
static constexpr size_t kMaxLogMessages = 500;

// Use the demangler from libc++.
extern "C" char* __cxa_demangle(const char*, char*, size_t*, int* status);

@@ -491,8 +494,8 @@ static void dump_mappings(Tombstone* tombstone, unwindstack::Maps* maps,
}

static void dump_log_file(Tombstone* tombstone, const char* logger, pid_t pid) {
  logger_list* logger_list =
      android_logger_list_open(android_name_to_log_id(logger), ANDROID_LOG_NONBLOCK, 0, pid);
  logger_list* logger_list = android_logger_list_open(android_name_to_log_id(logger),
                                                      ANDROID_LOG_NONBLOCK, kMaxLogMessages, pid);

  LogBuffer buffer;