summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Salyzyn <salyzyn@google.com>2016-10-24 13:11:46 -0700
committerMark Salyzyn <salyzyn@google.com>2016-10-24 13:39:19 -0700
commit9f53cac1b4e397c42bf640eec0eed4a2ffae6f60 (patch)
treeef164a303d2906874c7319fa1554defbcf1ad478
parent8cf0bd75f79ed641b5841dea1d34af18c6b4d40d (diff)
downloadcore-9f53cac1b4e397c42bf640eec0eed4a2ffae6f60.tar.gz
core-9f53cac1b4e397c42bf640eec0eed4a2ffae6f60.tar.bz2
core-9f53cac1b4e397c42bf640eec0eed4a2ffae6f60.zip
fix regression from android_lookupEventTag_len()
Commit 807e40ecc9786755e2f74a7a6a9b20c812588119 'liblog: logd: Add android_lookupEventTag_len()' which addressed a Dirty Shared memory leak resulted in a regression. Most notably logcat <tag> stopped working for the events log buffer. AndroidLogEntry::tag also requires callers to check out AndroidLogEntry::tagLen as tag is no longer guaranteed to be nul terminated. Test: logcat-unit-tests --gtest_filter=logcat.event_tag_filter Bug: 31456426 Change-Id: Ibe5236131b640eb5b7e3df0ab4b5f3e25b85ad45
-rw-r--r--debuggerd/tombstone.cpp4
-rw-r--r--logcat/logcat.cpp4
-rw-r--r--logcat/tests/logcat_test.cpp20
3 files changed, 25 insertions, 3 deletions
diff --git a/debuggerd/tombstone.cpp b/debuggerd/tombstone.cpp
index 459e4cc45..1e474834e 100644
--- a/debuggerd/tombstone.cpp
+++ b/debuggerd/tombstone.cpp
@@ -576,9 +576,9 @@ static void dump_log_file(
AndroidLogEntry e;
char buf[512];
android_log_processBinaryLogBuffer(entry, &e, g_eventTagMap, buf, sizeof(buf));
- _LOG(log, logtype::LOGS, "%s.%03d %5d %5d %c %-8s: %s\n",
+ _LOG(log, logtype::LOGS, "%s.%03d %5d %5d %c %-8.*s: %s\n",
timeBuf, entry->nsec / 1000000, entry->pid, entry->tid,
- 'I', e.tag, e.message);
+ 'I', (int)e.tagLen, e.tag, e.message);
continue;
}
diff --git a/logcat/logcat.cpp b/logcat/logcat.cpp
index d1a23ae31..fed975990 100644
--- a/logcat/logcat.cpp
+++ b/logcat/logcat.cpp
@@ -187,7 +187,9 @@ static void processBuffer(log_device_t* dev, struct log_msg *buf)
goto error;
}
- if (android_log_shouldPrintLine(g_logformat, entry.tag, entry.priority)) {
+ if (android_log_shouldPrintLine(g_logformat,
+ std::string(entry.tag, entry.tagLen).c_str(),
+ entry.priority)) {
bool match = regexOk(entry);
g_printCount += match;
diff --git a/logcat/tests/logcat_test.cpp b/logcat/tests/logcat_test.cpp
index 66800b15e..fd4e2fbef 100644
--- a/logcat/tests/logcat_test.cpp
+++ b/logcat/tests/logcat_test.cpp
@@ -79,6 +79,26 @@ TEST(logcat, buckets) {
EXPECT_EQ(4, count);
}
+TEST(logcat, event_tag_filter) {
+ FILE *fp;
+
+ ASSERT_TRUE(NULL != (fp = popen(
+ "logcat -b events -d -s auditd am_proc_start am_pss am_proc_bound dvm_lock_sample am_wtf 2>/dev/null",
+ "r")));
+
+ char buffer[BIG_BUFFER];
+
+ int count = 0;
+
+ while (fgets(buffer, sizeof(buffer), fp)) {
+ ++count;
+ }
+
+ pclose(fp);
+
+ EXPECT_LT(4, count);
+}
+
TEST(logcat, year) {
if (android_log_clockid() == CLOCK_MONOTONIC) {