diff options
author | Jeff Sharkey <jsharkey@android.com> | 2011-10-28 22:27:24 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-10-28 22:27:24 +0000 |
commit | 42b54d83dfe12e37d7763e53e6234bbf92f2e7cd (patch) | |
tree | 911021b0eb8d8733f63e71a388b68d0d25616e7e | |
parent | 1941c91389e8b9ba09ea6029b9d1f79abb42fe07 (diff) | |
parent | 1b3c42992abbd97afb51af4bd8754646b8ebf689 (diff) | |
download | system_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.c | 29 |
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; } |