Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6197e5e6 authored by Mark Salyzyn's avatar Mark Salyzyn Committed by Gerrit Code Review
Browse files

Merge "liblog: fix android_log_printLogLine empty event string"

parents 7e923fb3 7cc8013e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1488,7 +1488,7 @@ char *android_log_formatLogLine (
        strcat(p, suffixBuf);
        p += suffixLen;
    } else {
        while(pm < (entry->message + entry->messageLen)) {
        do {
            const char *lineStart;
            size_t lineLen;
            lineStart = pm;
@@ -1510,7 +1510,7 @@ char *android_log_formatLogLine (
            p += suffixLen;

            if (*pm == '\n') pm++;
        }
        } while (pm < (entry->message + entry->messageLen));
    }

    if (p_outLength != NULL) {
+127 −5
Original line number Diff line number Diff line
@@ -165,6 +165,133 @@ TEST(liblog, __android_log_btwrite__android_logger_list_read) {
    android_logger_list_close(logger_list);
}

static inline int32_t get4LE(const char* src)
{
    return src[0] | (src[1] << 8) | (src[2] << 16) | (src[3] << 24);
}

TEST(liblog, __android_log_bswrite) {
    struct logger_list *logger_list;

    pid_t pid = getpid();

    ASSERT_TRUE(NULL != (logger_list = android_logger_list_open(
        LOG_ID_EVENTS, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 1000, pid)));

    static const char buffer[] = "Hello World";
    log_time ts(android_log_clockid());

    ASSERT_LT(0, __android_log_bswrite(0, buffer));
    usleep(1000000);

    int count = 0;

    for (;;) {
        log_msg log_msg;
        if (android_logger_list_read(logger_list, &log_msg) <= 0) {
            break;
        }

        ASSERT_EQ(log_msg.entry.pid, pid);

        if ((log_msg.entry.sec < (ts.tv_sec - 1))
         || ((ts.tv_sec + 1) < log_msg.entry.sec)
         || (log_msg.entry.len != (4 + 1 + 4 + sizeof(buffer) - 1))
         || (log_msg.id() != LOG_ID_EVENTS)) {
            continue;
        }

        char *eventData = log_msg.msg();

        if (eventData[4] != EVENT_TYPE_STRING) {
            continue;
        }

        int len = get4LE(eventData + 4 + 1);
        if (len == (sizeof(buffer) - 1)) {
            ++count;

            AndroidLogFormat *logformat = android_log_format_new();
            EXPECT_TRUE(NULL != logformat);
            AndroidLogEntry entry;
            char msgBuf[1024];
            EXPECT_EQ(0, android_log_processBinaryLogBuffer(&log_msg.entry_v1,
                                                            &entry,
                                                            NULL,
                                                            msgBuf,
                                                            sizeof(msgBuf)));
            fflush(stderr);
            EXPECT_EQ(31, android_log_printLogLine(logformat, fileno(stderr), &entry));
            android_log_format_free(logformat);
        }
    }

    EXPECT_EQ(1, count);

    android_logger_list_close(logger_list);
}

TEST(liblog, __android_log_bswrite__empty_string) {
    struct logger_list *logger_list;

    pid_t pid = getpid();

    ASSERT_TRUE(NULL != (logger_list = android_logger_list_open(
        LOG_ID_EVENTS, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 1000, pid)));

    static const char buffer[] = "";
    log_time ts(android_log_clockid());

    ASSERT_LT(0, __android_log_bswrite(0, buffer));
    usleep(1000000);

    int count = 0;

    for (;;) {
        log_msg log_msg;
        if (android_logger_list_read(logger_list, &log_msg) <= 0) {
            break;
        }

        ASSERT_EQ(log_msg.entry.pid, pid);

        if ((log_msg.entry.sec < (ts.tv_sec - 1))
         || ((ts.tv_sec + 1) < log_msg.entry.sec)
         || (log_msg.entry.len != (4 + 1 + 4))
         || (log_msg.id() != LOG_ID_EVENTS)) {
            continue;
        }

        char *eventData = log_msg.msg();

        if (eventData[4] != EVENT_TYPE_STRING) {
            continue;
        }

        int len = get4LE(eventData + 4 + 1);
        if (len == 0) {
            ++count;

            AndroidLogFormat *logformat = android_log_format_new();
            EXPECT_TRUE(NULL != logformat);
            AndroidLogEntry entry;
            char msgBuf[1024];
            EXPECT_EQ(0, android_log_processBinaryLogBuffer(&log_msg.entry_v1,
                                                            &entry,
                                                            NULL,
                                                            msgBuf,
                                                            sizeof(msgBuf)));
            fflush(stderr);
            EXPECT_EQ(20, android_log_printLogLine(logformat, fileno(stderr), &entry));
            android_log_format_free(logformat);
        }
    }

    EXPECT_EQ(1, count);

    android_logger_list_close(logger_list);
}

TEST(liblog, __security) {
    static const char persist_key[] = "persist.logd.security";
    static const char readonly_key[] = "ro.device_owner";
@@ -1106,11 +1233,6 @@ TEST(liblog, is_loggable) {
    property_set(key + base_offset, hold[3]);
}

static inline int32_t get4LE(const char* src)
{
    return src[0] | (src[1] << 8) | (src[2] << 16) | (src[3] << 24);
}

TEST(liblog, android_errorWriteWithInfoLog__android_logger_list_read__typical) {
    const int TAG = 123456781;
    const char SUBTAG[] = "test-subtag";