From 1769074bd556e21e0c6ed29d9059960f998e28d1 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Fri, 16 Oct 2015 21:08:57 +0100 Subject: coverity#1327454 Uncaught exception and a boatload more along that vein Change-Id: Ic7d458d3b8e5c99df1995251f75d3ad57d0df967 --- io/source/stm/omark.cxx | 39 +++----------------------- io/source/stm/opipe.cxx | 30 +++++--------------- io/source/stm/streamhelper.cxx | 63 +++++++++++++----------------------------- io/source/stm/streamhelper.hxx | 33 ++++++---------------- 4 files changed, 39 insertions(+), 126 deletions(-) diff --git a/io/source/stm/omark.cxx b/io/source/stm/omark.cxx index 108a9aa5c945..646f06c2b98b 100644 --- a/io/source/stm/omark.cxx +++ b/io/source/stm/omark.cxx @@ -174,19 +174,8 @@ void OMarkableOutputStream::writeBytes(const Sequence< sal_Int8 >& aData) else { MutexGuard guard( m_mutex ); // new data must be buffered - try - { - m_pBuffer->writeAt( m_nCurrentPos , aData ); - m_nCurrentPos += aData.getLength(); - } - catch( IRingBuffer_OutOfBoundsException & ) - { - throw BufferSizeExceededException(); - } - catch( IRingBuffer_OutOfMemoryException & ) - { - throw BufferSizeExceededException(); - } + m_pBuffer->writeAt( m_nCurrentPos , aData ); + m_nCurrentPos += aData.getLength(); checkMarksAndFlush(); } } @@ -605,16 +594,7 @@ sal_Int32 OMarkableInputStream::readBytes(Sequence< sal_Int8 >& aData, sal_Int32 OSL_ASSERT( aData.getLength() == nRead ); - try - { - m_pBuffer->writeAt( m_pBuffer->getSize() , aData ); - } - catch( IRingBuffer_OutOfMemoryException & ) { - throw BufferSizeExceededException(); - } - catch( IRingBuffer_OutOfBoundsException & ) { - throw BufferSizeExceededException(); - } + m_pBuffer->writeAt( m_pBuffer->getSize() , aData ); if( nRead < nToRead ) { nBytesToRead = nBytesToRead - (nToRead-nRead); @@ -668,18 +648,7 @@ sal_Int32 OMarkableInputStream::readSomeBytes(Sequence< sal_Int8 >& aData, sal_I if( nRead ) { aData.realloc( nRead ); - try - { - m_pBuffer->writeAt( m_pBuffer->getSize() , aData ); - } - catch( IRingBuffer_OutOfMemoryException & ) - { - throw BufferSizeExceededException(); - } - catch( IRingBuffer_OutOfBoundsException & ) - { - throw BufferSizeExceededException(); - } + m_pBuffer->writeAt( m_pBuffer->getSize() , aData ); } nBytesRead = Min( nMaxBytesToRead , nInBuffer + nRead ); diff --git a/io/source/stm/opipe.cxx b/io/source/stm/opipe.cxx index ad59a0951288..494619cf882c 100644 --- a/io/source/stm/opipe.cxx +++ b/io/source/stm/opipe.cxx @@ -303,33 +303,17 @@ void OPipeImpl::writeBytes(const Sequence< sal_Int8 >& aData) } // adjust buffersize if necessary - - try + if( m_nBytesToSkip ) { - if( m_nBytesToSkip ) - { - Sequence< sal_Int8 > seqCopy( nLen - m_nBytesToSkip ); - memcpy( seqCopy.getArray() , &( aData.getConstArray()[m_nBytesToSkip] ) , nLen-m_nBytesToSkip ); - m_pFIFO->write( seqCopy ); - } - else - { - m_pFIFO->write( aData ); - } - m_nBytesToSkip = 0; + Sequence< sal_Int8 > seqCopy( nLen - m_nBytesToSkip ); + memcpy( seqCopy.getArray() , &( aData.getConstArray()[m_nBytesToSkip] ) , nLen-m_nBytesToSkip ); + m_pFIFO->write( seqCopy ); } - catch ( I_FIFO_OutOfBoundsException & ) + else { - throw BufferSizeExceededException( - "Pipe::writeBytes BufferSizeExceededException", - *this ); - } - catch ( I_FIFO_OutOfMemoryException & ) - { - throw BufferSizeExceededException( - "Pipe::writeBytes BufferSizeExceededException", - *this ); + m_pFIFO->write( aData ); } + m_nBytesToSkip = 0; // readBytes may check again if enough bytes are available m_conditionBytesAvail.set(); diff --git a/io/source/stm/streamhelper.cxx b/io/source/stm/streamhelper.cxx index 516d4e506912..3e789ac0dada 100644 --- a/io/source/stm/streamhelper.cxx +++ b/io/source/stm/streamhelper.cxx @@ -33,50 +33,22 @@ using namespace ::com::sun::star::uno; namespace io_stm { void MemFIFO::write( const Sequence< sal_Int8 > &seq ) - throw ( I_FIFO_OutOfMemoryException, - I_FIFO_OutOfBoundsException ) + throw ( css::io::BufferSizeExceededException ) { - try - { - writeAt(getSize(), seq ); - } - catch( IRingBuffer_OutOfMemoryException & ) - { - throw I_FIFO_OutOfMemoryException(); - } - catch( IRingBuffer_OutOfBoundsException & ) - { - throw I_FIFO_OutOfBoundsException(); - } + writeAt(getSize(), seq); } -void MemFIFO::read( Sequence &seq , sal_Int32 nBufferLen ) throw (I_FIFO_OutOfBoundsException) +void MemFIFO::read( Sequence &seq , sal_Int32 nBufferLen ) throw (css::io::BufferSizeExceededException) { - try - { - readAt(0, seq , nBufferLen); - forgetFromStart( nBufferLen ); - } - catch ( IRingBuffer_OutOfBoundsException & ) - { - throw I_FIFO_OutOfBoundsException(); - } + readAt(0, seq , nBufferLen); + forgetFromStart( nBufferLen ); } -void MemFIFO::skip( sal_Int32 nBytesToSkip ) throw ( I_FIFO_OutOfBoundsException ) +void MemFIFO::skip( sal_Int32 nBytesToSkip ) throw ( css::io::BufferSizeExceededException ) { - try - { - forgetFromStart( nBytesToSkip ); - } - catch( IRingBuffer_OutOfBoundsException & ) - { - throw I_FIFO_OutOfBoundsException(); - } + forgetFromStart( nBytesToSkip ); } - - MemRingBuffer::MemRingBuffer() { m_nBufferLen = 0; @@ -92,7 +64,7 @@ MemRingBuffer::~MemRingBuffer() } } -void MemRingBuffer::resizeBuffer( sal_Int32 nMinSize ) throw( IRingBuffer_OutOfMemoryException) +void MemRingBuffer::resizeBuffer( sal_Int32 nMinSize ) throw(css::io::BufferSizeExceededException) { sal_Int32 nNewLen = 1; @@ -108,7 +80,8 @@ void MemRingBuffer::resizeBuffer( sal_Int32 nMinSize ) throw( IRingBuffer_OutOfM if( nNewLen != m_nBufferLen ) { m_p = static_cast(rtl_reallocateMemory( m_p , nNewLen )); if( !m_p ) { - throw IRingBuffer_OutOfMemoryException(); + throw css::io::BufferSizeExceededException( + "MemRingBuffer::resizeBuffer BufferSizeExceededException"); } if( m_nStart + m_nOccupiedBuffer > m_nBufferLen ) { @@ -121,10 +94,11 @@ void MemRingBuffer::resizeBuffer( sal_Int32 nMinSize ) throw( IRingBuffer_OutOfM void MemRingBuffer::readAt( sal_Int32 nPos, Sequence &seq , sal_Int32 nBytesToRead ) const - throw(IRingBuffer_OutOfBoundsException) + throw(css::io::BufferSizeExceededException) { if( nPos + nBytesToRead > m_nOccupiedBuffer ) { - throw IRingBuffer_OutOfBoundsException(); + throw css::io::BufferSizeExceededException( + "MemRingBuffer::readAt BufferSizeExceededException"); } sal_Int32 nStartReadingPos = nPos + m_nStart; @@ -146,15 +120,15 @@ void MemRingBuffer::readAt( sal_Int32 nPos, Sequence &seq , sal_Int32 void MemRingBuffer::writeAt( sal_Int32 nPos, const Sequence &seq ) - throw (IRingBuffer_OutOfBoundsException, - IRingBuffer_OutOfMemoryException ) + throw (css::io::BufferSizeExceededException) { checkInvariants(); sal_Int32 nLen = seq.getLength(); if( nPos < 0 || nPos > std::numeric_limits< sal_Int32 >::max() - nLen ) { - throw IRingBuffer_OutOfBoundsException(); + throw css::io::BufferSizeExceededException( + "MemRingBuffer::writeAt BufferSizeExceededException"); } if( nPos + nLen - m_nOccupiedBuffer > 0 ) { @@ -187,11 +161,12 @@ sal_Int32 MemRingBuffer::getSize() const throw() return m_nOccupiedBuffer; } -void MemRingBuffer::forgetFromStart( sal_Int32 nBytesToForget ) throw (IRingBuffer_OutOfBoundsException) +void MemRingBuffer::forgetFromStart( sal_Int32 nBytesToForget ) throw (css::io::BufferSizeExceededException) { checkInvariants(); if( nBytesToForget > m_nOccupiedBuffer ) { - throw IRingBuffer_OutOfBoundsException(); + throw css::io::BufferSizeExceededException( + "MemRingBuffer::forgetFromStart BufferSizeExceededException"); } m_nStart += nBytesToForget; if( m_nStart >= m_nBufferLen ) { diff --git a/io/source/stm/streamhelper.hxx b/io/source/stm/streamhelper.hxx index 463c185364e4..fd00bcc7e241 100644 --- a/io/source/stm/streamhelper.hxx +++ b/io/source/stm/streamhelper.hxx @@ -20,6 +20,8 @@ #ifndef INCLUDED_IO_SOURCE_STM_STREAMHELPER_HXX #define INCLUDED_IO_SOURCE_STM_STREAMHELPER_HXX +#include + // Save NDEBUG state #ifdef NDEBUG #define STREAMHELPER_HXX_HAD_NDEBUG @@ -37,14 +39,6 @@ namespace io_stm { -class IRingBuffer_OutOfBoundsException : - public Exception -{}; - -class IRingBuffer_OutOfMemoryException : - public Exception -{}; - class MemRingBuffer { public: @@ -56,18 +50,17 @@ public: * data is written beyond end. ***/ void writeAt( sal_Int32 nPos, const Sequence &) - throw( IRingBuffer_OutOfMemoryException, - IRingBuffer_OutOfBoundsException ); + throw(css::io::BufferSizeExceededException); void readAt( sal_Int32 nPos, Sequence & , sal_Int32 nBytesToRead ) const - throw( IRingBuffer_OutOfBoundsException ); + throw(css::io::BufferSizeExceededException); sal_Int32 getSize() const throw(); - void forgetFromStart( sal_Int32 nBytesToForget ) throw(IRingBuffer_OutOfBoundsException); + void forgetFromStart(sal_Int32 nBytesToForget) throw(css::io::BufferSizeExceededException); virtual void shrink() throw(); private: - void resizeBuffer( sal_Int32 nMinSize ) throw( IRingBuffer_OutOfMemoryException ); + void resizeBuffer(sal_Int32 nMinSize) throw(css::io::BufferSizeExceededException); inline void checkInvariants() { assert( m_nBufferLen >= 0 ); assert( m_nOccupiedBuffer >= 0 ); @@ -84,24 +77,16 @@ private: }; -class I_FIFO_OutOfBoundsException : - public Exception -{}; - -class I_FIFO_OutOfMemoryException : - public Exception -{}; - class MemFIFO : private MemRingBuffer { public: void write( const Sequence &) - throw( I_FIFO_OutOfMemoryException, I_FIFO_OutOfBoundsException ); + throw( css::io::BufferSizeExceededException ); void read( Sequence & , sal_Int32 nBytesToRead ) - throw( I_FIFO_OutOfBoundsException ); + throw( css::io::BufferSizeExceededException ); void skip( sal_Int32 nBytesToSkip ) - throw( I_FIFO_OutOfBoundsException ); + throw( css::io::BufferSizeExceededException ); sal_Int32 getSize() const throw() { return MemRingBuffer::getSize(); } virtual void shrink() throw() override -- cgit v1.2.3