liblog: logprint: deal with malformed log messages
(cherry picked from commit 083c53462a
)
Try to print as much content as possible should the application
logging only submit content as part of a tag with an empty message.
We search for the first non-printable ascii character in the tag, in
order to split it up for printing.
Applications (such as com.yahoo.mobile.client.android.weather) that
malform their log messages will no longer be punished by truncating
the content, but this should never be considered advocacy for their
bad behavior.
Bug: 27585978
Change-Id: Idb0680e8d6a6ad2bef5150661905acccb5b70afb
This commit is contained in:
parent
6eb4eab106
commit
476b771bda
2 changed files with 15 additions and 3 deletions
|
@ -512,8 +512,18 @@ LIBLOG_ABI_PUBLIC int android_log_processLogBuffer(
|
|||
}
|
||||
|
||||
if (msgStart == -1) {
|
||||
fprintf(stderr, "+++ LOG: malformed log message\n");
|
||||
return -1;
|
||||
/* +++ LOG: malformed log message, DYB */
|
||||
for (i = 1; i < buf->len; i++) {
|
||||
/* odd characters in tag? */
|
||||
if ((msg[i] <= ' ') || (msg[i] == ':') || (msg[i] >= 0x7f)) {
|
||||
msg[i] = '\0';
|
||||
msgStart = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (msgStart == -1) {
|
||||
msgStart = buf->len - 1; /* All tag, no message, print truncates */
|
||||
}
|
||||
}
|
||||
if (msgEnd == -1) {
|
||||
/* incoming message not null-terminated; force it */
|
||||
|
|
|
@ -1004,8 +1004,10 @@ TEST(liblog, __android_log_buf_print__maxtag) {
|
|||
fflush(stderr);
|
||||
int printLogLine =
|
||||
android_log_printLogLine(logformat, fileno(stderr), &entry);
|
||||
// Legacy tag truncation
|
||||
EXPECT_LE(128, printLogLine);
|
||||
EXPECT_GT(LOGGER_ENTRY_MAX_PAYLOAD, printLogLine);
|
||||
// Measured maximum if we try to print part of the tag as message
|
||||
EXPECT_GT(LOGGER_ENTRY_MAX_PAYLOAD * 13 / 8, printLogLine);
|
||||
}
|
||||
android_log_format_free(logformat);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue