summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2011-10-28 22:27:24 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2011-10-28 22:27:24 +0000
commit42b54d83dfe12e37d7763e53e6234bbf92f2e7cd (patch)
tree911021b0eb8d8733f63e71a388b68d0d25616e7e
parent1941c91389e8b9ba09ea6029b9d1f79abb42fe07 (diff)
parent1b3c42992abbd97afb51af4bd8754646b8ebf689 (diff)
downloadsystem_core-42b54d83dfe12e37d7763e53e6234bbf92f2e7cd.zip
system_core-42b54d83dfe12e37d7763e53e6234bbf92f2e7cd.tar.gz
system_core-42b54d83dfe12e37d7763e53e6234bbf92f2e7cd.tar.bz2
am 1b3c4299: am 70212a40: Merge "Gracefully handle truncated log messages." into ics-mr1
* commit '1b3c42992abbd97afb51af4bd8754646b8ebf689': Gracefully handle truncated log messages.
-rw-r--r--liblog/logprint.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/liblog/logprint.c b/liblog/logprint.c
index daada5a..8366c94 100644
--- a/liblog/logprint.c
+++ b/liblog/logprint.c
@@ -362,6 +362,9 @@ int android_log_processLogBuffer(struct logger_entry *buf,
* starts at buf->msg+1
* msg
* starts at buf->msg+1+len(tag)+1
+ *
+ * The message may have been truncated by the kernel log driver.
+ * When that happens, we must null-terminate the message ourselves.
*/
if (buf->len < 3) {
// An well-formed entry must consist of at least a priority
@@ -370,21 +373,35 @@ int android_log_processLogBuffer(struct logger_entry *buf,
return -1;
}
- int nullsFound = 0;
+ int msgStart = -1;
+ int msgEnd = -1;
+
int i;
for (i = 1; i < buf->len; i++) {
if (buf->msg[i] == '\0') {
- nullsFound++;
+ if (msgStart == -1) {
+ msgStart = i + 1;
+ } else {
+ msgEnd = i;
+ break;
+ }
}
}
- if (nullsFound != 2) {
- fprintf(stderr, "+++ LOG: malformed log entry\n");
+
+ if (msgStart == -1) {
+ fprintf(stderr, "+++ LOG: malformed log message\n");
return -1;
}
+ if (msgEnd == -1) {
+ // incoming message not null-terminated; force it
+ msgEnd = buf->len - 1;
+ buf->msg[msgEnd] = '\0';
+ }
+
entry->priority = buf->msg[0];
entry->tag = buf->msg + 1;
- entry->message = entry->tag + strlen(entry->tag) + 1;
- entry->messageLen = strlen(entry->message);
+ entry->message = buf->msg + msgStart;
+ entry->messageLen = msgEnd - msgStart;
return 0;
}