summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Harry Cutts <hcutts@google.com> 2024-11-18 19:08:04 +0000
committer Harry Cutts <hcutts@google.com> 2024-11-18 19:08:04 +0000
commitffbd83c6226273ae00781f42e52f485d895ee864 (patch)
tree8b56a2d9f818bdff5c274be07abc42f4606ac1d2
parent6e56673448d0b83d8ee9128b1c426b1ee58d318d (diff)
input: don't log the whole MotionEvent in index checks
We've had a crash report where this causes infinite recursion, probably through the following call sequence: operator<<(std::ostream&, const MotionEvent&) → MotionEvent::get(X|Y) → MotionEvent::getAxisValue → MotionEvent::getHistoricalAxisValue → MotionEvent::getHistoricalRawPointerCoords → operator<<(std::ostream&, const MotionEvent&) It's unclear how the MotionEvent gets corrupted such that getHistoricalRawPointerCoords is called with invalid indexes, but the simple fix is to only log a useful subset of the whole event in these checks. Bug: 379368465 Test: m checkinput Flag: EXEMPT bug fix Change-Id: I0822f88fc7da6ba08ba6dbbab71ca5aaf78fc35d
-rw-r--r--libs/input/Input.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/libs/input/Input.cpp b/libs/input/Input.cpp
index a2bb3453fe..b87a7068b5 100644
--- a/libs/input/Input.cpp
+++ b/libs/input/Input.cpp
@@ -705,15 +705,17 @@ float MotionEvent::getAxisValue(int32_t axis, size_t pointerIndex) const {
const PointerCoords* MotionEvent::getHistoricalRawPointerCoords(
size_t pointerIndex, size_t historicalIndex) const {
if (CC_UNLIKELY(pointerIndex < 0 || pointerIndex >= getPointerCount())) {
- LOG(FATAL) << __func__ << ": Invalid pointer index " << pointerIndex << " for " << *this;
+ LOG(FATAL) << __func__ << ": Invalid pointer index " << pointerIndex
+ << "; should be between >0 and ≤" << getPointerCount();
}
if (CC_UNLIKELY(historicalIndex < 0 || historicalIndex > getHistorySize())) {
- LOG(FATAL) << __func__ << ": Invalid historical index " << historicalIndex << " for "
- << *this;
+ LOG(FATAL) << __func__ << ": Invalid historical index " << historicalIndex
+ << "; should be >0 and ≤" << getHistorySize();
}
const size_t position = historicalIndex * getPointerCount() + pointerIndex;
if (CC_UNLIKELY(position < 0 || position >= mSamplePointerCoords.size())) {
- LOG(FATAL) << __func__ << ": Invalid array index " << position << " for " << *this;
+ LOG(FATAL) << __func__ << ": Invalid array index " << position << "; should be >0 and ≤"
+ << mSamplePointerCoords.size();
}
return &mSamplePointerCoords[position];
}