liblog: logprint: deal with malformed log messages
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
a01de8fee1
commit
083c53462a
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 */
|
||||
|
|
|
|||
|
|
@ -1062,8 +1062,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…
Add table
Reference in a new issue