diff options
Diffstat (limited to 'service')
2 files changed, 30 insertions, 11 deletions
diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/utils/ImsMediaBitWriter.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/utils/ImsMediaBitWriter.h index e4aa8ea9..693b2f5c 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/utils/ImsMediaBitWriter.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/utils/ImsMediaBitWriter.h @@ -25,9 +25,9 @@ public: ImsMediaBitWriter(); ~ImsMediaBitWriter(); void SetBuffer(uint8_t* pbBuffer, uint32_t nBufferSize); - void Write(uint32_t nValue, uint32_t nSize); - void WriteByteBuffer(uint8_t* pbSrc, uint32_t nBitSize); - void WriteByteBuffer(uint32_t value); + bool Write(uint32_t nValue, uint32_t nSize); + bool WriteByteBuffer(uint8_t* pbSrc, uint32_t nBitSize); + bool WriteByteBuffer(uint32_t value); void Seek(uint32_t nSize); void AddPadding(); uint32_t GetBufferSize(); diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitWriter.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitWriter.cpp index cba37f55..91d69581 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitWriter.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitWriter.cpp @@ -40,15 +40,17 @@ void ImsMediaBitWriter::SetBuffer(uint8_t* pbBuffer, uint32_t nBufferSize) mMaxBufferSize = nBufferSize; } -void ImsMediaBitWriter::Write(uint32_t nValue, uint32_t nSize) +bool ImsMediaBitWriter::Write(uint32_t nValue, uint32_t nSize) { if (nSize == 0) - return; + { + return false; + } if (mBuffer == nullptr || nSize > 24 || mBufferFull) { IMLOGE2("[Write] nSize[%d], BufferFull[%d]", nSize, mBufferFull); - return; + return false; } // write to bit buffer @@ -67,9 +69,11 @@ void ImsMediaBitWriter::Write(uint32_t nValue, uint32_t nSize) { mBufferFull = true; } + + return true; } -void ImsMediaBitWriter::WriteByteBuffer(uint8_t* pbSrc, uint32_t nBitSize) +bool ImsMediaBitWriter::WriteByteBuffer(uint8_t* pbSrc, uint32_t nBitSize) { uint32_t nByteSize; uint32_t nRemainBitSize; @@ -87,7 +91,10 @@ void ImsMediaBitWriter::WriteByteBuffer(uint8_t* pbSrc, uint32_t nBitSize) for (i = 0; i < nByteSize; i++) { - Write(pbSrc[i], 8); + if (!Write(pbSrc[i], 8)) + { + return false; + } } } @@ -95,11 +102,17 @@ void ImsMediaBitWriter::WriteByteBuffer(uint8_t* pbSrc, uint32_t nBitSize) { uint32_t v = pbSrc[nByteSize]; v >>= (8 - nRemainBitSize); - Write(v, nRemainBitSize); + + if (!Write(v, nRemainBitSize)) + { + return false; + } } + + return true; } -void ImsMediaBitWriter::WriteByteBuffer(uint32_t value) +bool ImsMediaBitWriter::WriteByteBuffer(uint32_t value) { uint32_t nRemainBitSize = 32; @@ -107,8 +120,14 @@ void ImsMediaBitWriter::WriteByteBuffer(uint32_t value) { nRemainBitSize -= 8; uint8_t v = (value >> nRemainBitSize) & 0x00ff; - Write(v, 8); + + if (!Write(v, 8)) + { + return false; + } } + + return true; } void ImsMediaBitWriter::Seek(uint32_t nSize) |