Don't WTF when reading empty data from the eventlog
Bug: 33446064
Fixes: 33446064
Test: run cts -m CtsUtilTestCases -t android.util.cts.EventLogTest
Change-Id: I4951202cd7d6ca441700b7122cfa3aae2167c7b0
diff --git a/core/java/android/util/EventLog.java b/core/java/android/util/EventLog.java
index 6196a97..99f6c2a9 100644
--- a/core/java/android/util/EventLog.java
+++ b/core/java/android/util/EventLog.java
@@ -56,6 +56,7 @@
/** A previously logged event read from the logs. Instances are thread safe. */
public static final class Event {
private final ByteBuffer mBuffer;
+ private Exception mLastWtf;
// Layout of event log entry received from Android logger.
// see system/core/include/log/logger.h
@@ -116,13 +117,19 @@
offset = V1_PAYLOAD_START;
}
mBuffer.limit(offset + mBuffer.getShort(LENGTH_OFFSET));
+ if ((offset + DATA_OFFSET) >= mBuffer.limit()) {
+ // no payload
+ return null;
+ }
mBuffer.position(offset + DATA_OFFSET); // Just after the tag.
return decodeObject();
} catch (IllegalArgumentException e) {
Log.wtf(TAG, "Illegal entry payload: tag=" + getTag(), e);
+ mLastWtf = e;
return null;
} catch (BufferUnderflowException e) {
Log.wtf(TAG, "Truncated entry payload: tag=" + getTag(), e);
+ mLastWtf = e;
return null;
}
}
@@ -148,6 +155,7 @@
return new String(mBuffer.array(), start, length, "UTF-8");
} catch (UnsupportedEncodingException e) {
Log.wtf(TAG, "UTF-8 is not supported", e);
+ mLastWtf = e;
return null;
}
@@ -173,6 +181,24 @@
byte[] bytes = mBuffer.array();
return Arrays.copyOf(bytes, bytes.length);
}
+
+ /**
+ * Retreive the last WTF error generated by this object.
+ * @hide
+ */
+ //VisibleForTesting
+ public Exception getLastError() {
+ return mLastWtf;
+ }
+
+ /**
+ * Clear the error state for this object.
+ * @hide
+ */
+ //VisibleForTesting
+ public void clearError() {
+ mLastWtf = null;
+ }
}
// We assume that the native methods deal with any concurrency issues.