summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dan Austin <danielaustin@google.com> 2015-09-22 14:28:07 -0700
committer Dan Austin <danielaustin@google.com> 2015-09-23 00:30:39 +0000
commit1faef80170b71ee4162dc910bfe1aea9d7181e58 (patch)
tree43a11e69d69a2a6fbbdb499d398d1aead129e838
parent251c8b3ff842363243c8eea25b369bd805af7aad (diff)
Eliminate multiple benign overflow conditions.
In InputTransport.cpp, there are multiple loops in which loop termination occurs when the value becomes zero. These termination conditions are all written value-- > 0, which, since value is unsigned, result in an unsigned integer overflow when value is 0. These loops were refactored to eliminate these conditions. Bug: 24171356 Change-Id: Ie135c4306d1f2cef2778e295242305ed5139221a
-rw-r--r--libs/input/InputTransport.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/libs/input/InputTransport.cpp b/libs/input/InputTransport.cpp
index 090ee530d1..92b28d9491 100644
--- a/libs/input/InputTransport.cpp
+++ b/libs/input/InputTransport.cpp
@@ -510,7 +510,8 @@ status_t InputConsumer::consume(InputEventFactoryInterface* factory,
status_t InputConsumer::consumeBatch(InputEventFactoryInterface* factory,
nsecs_t frameTime, uint32_t* outSeq, InputEvent** outEvent) {
status_t result;
- for (size_t i = mBatches.size(); i-- > 0; ) {
+ for (size_t i = mBatches.size(); i > 0; ) {
+ i--;
Batch& batch = mBatches.editItemAt(i);
if (frameTime < 0) {
result = consumeSamples(factory, batch, batch.samples.size(),
@@ -815,7 +816,8 @@ status_t InputConsumer::sendFinishedSignal(uint32_t seq, bool handled) {
uint32_t currentSeq = seq;
uint32_t chainSeqs[seqChainCount];
size_t chainIndex = 0;
- for (size_t i = seqChainCount; i-- > 0; ) {
+ for (size_t i = seqChainCount; i > 0; ) {
+ i--;
const SeqChain& seqChain = mSeqChains.itemAt(i);
if (seqChain.seq == currentSeq) {
currentSeq = seqChain.chain;
@@ -824,7 +826,8 @@ status_t InputConsumer::sendFinishedSignal(uint32_t seq, bool handled) {
}
}
status_t status = OK;
- while (!status && chainIndex-- > 0) {
+ while (!status && chainIndex > 0) {
+ chainIndex--;
status = sendUnchainedFinishedSignal(chainSeqs[chainIndex], handled);
}
if (status) {
@@ -834,7 +837,10 @@ status_t InputConsumer::sendFinishedSignal(uint32_t seq, bool handled) {
seqChain.seq = chainIndex != 0 ? chainSeqs[chainIndex - 1] : seq;
seqChain.chain = chainSeqs[chainIndex];
mSeqChains.push(seqChain);
- } while (chainIndex-- > 0);
+ if (chainIndex != 0) {
+ chainIndex--;
+ }
+ } while (chainIndex > 0);
return status;
}
}