Merge "DO NOT MERGE KeyStore ChunkedStreamer must tolerate update consuming 0 bytes." into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e3a263bb6d
@@ -139,18 +139,28 @@ class KeyStoreCryptoOperationChunkedStreamer implements KeyStoreCryptoOperationS
|
|||||||
} else if (opResult.resultCode != KeyStore.NO_ERROR) {
|
} else if (opResult.resultCode != KeyStore.NO_ERROR) {
|
||||||
throw KeyStore.getKeyStoreException(opResult.resultCode);
|
throw KeyStore.getKeyStoreException(opResult.resultCode);
|
||||||
}
|
}
|
||||||
if (opResult.inputConsumed <= 0) {
|
if (opResult.inputConsumed == 0) {
|
||||||
|
// Some KM implementations do not consume data in certain block modes unless a
|
||||||
|
// full block of data was presented.
|
||||||
|
if (inputLength > 0) {
|
||||||
|
// More input is available, but it wasn't included into the previous chunk
|
||||||
|
// because the chunk reached its maximum permitted size.
|
||||||
|
// Shouldn't have happened.
|
||||||
throw new KeyStoreException(KeymasterDefs.KM_ERROR_INVALID_INPUT_LENGTH,
|
throw new KeyStoreException(KeymasterDefs.KM_ERROR_INVALID_INPUT_LENGTH,
|
||||||
"Keystore consumed 0 of " + mChunkLength + " bytes provided.");
|
"Keystore consumed nothing from max-sized chunk: " + mChunkLength
|
||||||
} else if (opResult.inputConsumed > mChunkLength) {
|
+ " bytes");
|
||||||
|
}
|
||||||
|
} else if (opResult.inputConsumed > mChunkLength || opResult.inputConsumed < 0) {
|
||||||
throw new KeyStoreException(KeymasterDefs.KM_ERROR_UNKNOWN_ERROR,
|
throw new KeyStoreException(KeymasterDefs.KM_ERROR_UNKNOWN_ERROR,
|
||||||
"Keystore consumed more input than provided. Provided: "
|
"Keystore consumed more input than provided (or inputConsumed was "
|
||||||
+ mChunkLength + ", consumed: " + opResult.inputConsumed);
|
+ "negative."
|
||||||
|
+ " Provided: " + mChunkLength
|
||||||
|
+ ", consumed: " + opResult.inputConsumed);
|
||||||
}
|
}
|
||||||
mChunkLength -= opResult.inputConsumed;
|
mChunkLength -= opResult.inputConsumed;
|
||||||
|
|
||||||
if (mChunkLength > 0) {
|
if (mChunkLength > 0) {
|
||||||
// Partialy consumed, shift chunk contents
|
// Partially consumed, shift chunk contents
|
||||||
ArrayUtils.copy(mChunk, opResult.inputConsumed, mChunk, 0, mChunkLength);
|
ArrayUtils.copy(mChunk, opResult.inputConsumed, mChunk, 0, mChunkLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user