diff --git a/liblog/logprint.c b/liblog/logprint.c index 02df8ddd6..7f02b4690 100644 --- a/liblog/logprint.c +++ b/liblog/logprint.c @@ -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 */ diff --git a/liblog/tests/liblog_test.cpp b/liblog/tests/liblog_test.cpp index 2767f73b0..ca2cda277 100644 --- a/liblog/tests/liblog_test.cpp +++ b/liblog/tests/liblog_test.cpp @@ -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); }