diff options
author | Yujie Qin <yujieqin@google.com> | 2016-06-16 11:39:34 +0200 |
---|---|---|
committer | Yujie Qin <yujieqin@google.com> | 2016-06-16 11:42:41 +0200 |
commit | cad166686787a494b6689b8adb013e016adfcd90 (patch) | |
tree | b38c3e241224d3b91747981383a949c86cee049a /media/jni/android_media_Utils.cpp | |
parent | c1720dce1b01893bf925267381ff4975095a718a (diff) |
Report error correctly for the implementation of
StreamInterface::GetData()
Bug: 28889197
Change-Id: Id07755e1b3637f85b6176a59935ad3a5597cfb05
Diffstat (limited to 'media/jni/android_media_Utils.cpp')
-rw-r--r-- | media/jni/android_media_Utils.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/media/jni/android_media_Utils.cpp b/media/jni/android_media_Utils.cpp index 359ebad5adbe..c62d93036c2e 100644 --- a/media/jni/android_media_Utils.cpp +++ b/media/jni/android_media_Utils.cpp @@ -68,16 +68,19 @@ piex::Error BufferedStream::GetData( if (sizeToRead <= kMinSizeToRead) { sizeToRead = kMinSizeToRead; } + void* tempBuffer = malloc(sizeToRead); - if (tempBuffer != NULL) { - size_t bytesRead = mStream->read(tempBuffer, sizeToRead); - if (bytesRead != sizeToRead) { - free(tempBuffer); - return piex::Error::kFail; - } - mStreamBuffer.write(tempBuffer, bytesRead); + if (tempBuffer == NULL) { + return piex::Error::kFail; + } + + size_t bytesRead = mStream->read(tempBuffer, sizeToRead); + if (bytesRead != sizeToRead) { free(tempBuffer); + return piex::Error::kFail; } + mStreamBuffer.write(tempBuffer, bytesRead); + free(tempBuffer); } // Read bytes. @@ -126,8 +129,8 @@ piex::Error FileStream::GetData( size_t size = fread((void*)data, sizeof(std::uint8_t), length, mFile); mPosition += size; - // Handle errors. - if (ferror(mFile)) { + // Handle errors and verify the size. + if (ferror(mFile) || size != length) { ALOGV("GetData read failed: (offset: %zu, length: %zu)", offset, length); return piex::Error::kFail; } |