Kaydet (Commit) 1769074b authored tarafından Caolán McNamara's avatar Caolán McNamara

coverity#1327454 Uncaught exception

and a boatload more along that vein

Change-Id: Ic7d458d3b8e5c99df1995251f75d3ad57d0df967
üst 6806a026
...@@ -174,19 +174,8 @@ void OMarkableOutputStream::writeBytes(const Sequence< sal_Int8 >& aData) ...@@ -174,19 +174,8 @@ void OMarkableOutputStream::writeBytes(const Sequence< sal_Int8 >& aData)
else { else {
MutexGuard guard( m_mutex ); MutexGuard guard( m_mutex );
// new data must be buffered // new data must be buffered
try m_pBuffer->writeAt( m_nCurrentPos , aData );
{ m_nCurrentPos += aData.getLength();
m_pBuffer->writeAt( m_nCurrentPos , aData );
m_nCurrentPos += aData.getLength();
}
catch( IRingBuffer_OutOfBoundsException & )
{
throw BufferSizeExceededException();
}
catch( IRingBuffer_OutOfMemoryException & )
{
throw BufferSizeExceededException();
}
checkMarksAndFlush(); checkMarksAndFlush();
} }
} }
...@@ -605,16 +594,7 @@ sal_Int32 OMarkableInputStream::readBytes(Sequence< sal_Int8 >& aData, sal_Int32 ...@@ -605,16 +594,7 @@ sal_Int32 OMarkableInputStream::readBytes(Sequence< sal_Int8 >& aData, sal_Int32
OSL_ASSERT( aData.getLength() == nRead ); OSL_ASSERT( aData.getLength() == nRead );
try m_pBuffer->writeAt( m_pBuffer->getSize() , aData );
{
m_pBuffer->writeAt( m_pBuffer->getSize() , aData );
}
catch( IRingBuffer_OutOfMemoryException & ) {
throw BufferSizeExceededException();
}
catch( IRingBuffer_OutOfBoundsException & ) {
throw BufferSizeExceededException();
}
if( nRead < nToRead ) { if( nRead < nToRead ) {
nBytesToRead = nBytesToRead - (nToRead-nRead); nBytesToRead = nBytesToRead - (nToRead-nRead);
...@@ -668,18 +648,7 @@ sal_Int32 OMarkableInputStream::readSomeBytes(Sequence< sal_Int8 >& aData, sal_I ...@@ -668,18 +648,7 @@ sal_Int32 OMarkableInputStream::readSomeBytes(Sequence< sal_Int8 >& aData, sal_I
if( nRead ) { if( nRead ) {
aData.realloc( nRead ); aData.realloc( nRead );
try m_pBuffer->writeAt( m_pBuffer->getSize() , aData );
{
m_pBuffer->writeAt( m_pBuffer->getSize() , aData );
}
catch( IRingBuffer_OutOfMemoryException & )
{
throw BufferSizeExceededException();
}
catch( IRingBuffer_OutOfBoundsException & )
{
throw BufferSizeExceededException();
}
} }
nBytesRead = Min( nMaxBytesToRead , nInBuffer + nRead ); nBytesRead = Min( nMaxBytesToRead , nInBuffer + nRead );
......
...@@ -303,33 +303,17 @@ void OPipeImpl::writeBytes(const Sequence< sal_Int8 >& aData) ...@@ -303,33 +303,17 @@ void OPipeImpl::writeBytes(const Sequence< sal_Int8 >& aData)
} }
// adjust buffersize if necessary // adjust buffersize if necessary
if( m_nBytesToSkip )
try
{ {
if( m_nBytesToSkip ) Sequence< sal_Int8 > seqCopy( nLen - m_nBytesToSkip );
{ memcpy( seqCopy.getArray() , &( aData.getConstArray()[m_nBytesToSkip] ) , nLen-m_nBytesToSkip );
Sequence< sal_Int8 > seqCopy( nLen - m_nBytesToSkip ); m_pFIFO->write( seqCopy );
memcpy( seqCopy.getArray() , &( aData.getConstArray()[m_nBytesToSkip] ) , nLen-m_nBytesToSkip );
m_pFIFO->write( seqCopy );
}
else
{
m_pFIFO->write( aData );
}
m_nBytesToSkip = 0;
} }
catch ( I_FIFO_OutOfBoundsException & ) else
{ {
throw BufferSizeExceededException( m_pFIFO->write( aData );
"Pipe::writeBytes BufferSizeExceededException",
*this );
}
catch ( I_FIFO_OutOfMemoryException & )
{
throw BufferSizeExceededException(
"Pipe::writeBytes BufferSizeExceededException",
*this );
} }
m_nBytesToSkip = 0;
// readBytes may check again if enough bytes are available // readBytes may check again if enough bytes are available
m_conditionBytesAvail.set(); m_conditionBytesAvail.set();
......
...@@ -33,50 +33,22 @@ using namespace ::com::sun::star::uno; ...@@ -33,50 +33,22 @@ using namespace ::com::sun::star::uno;
namespace io_stm { namespace io_stm {
void MemFIFO::write( const Sequence< sal_Int8 > &seq ) void MemFIFO::write( const Sequence< sal_Int8 > &seq )
throw ( I_FIFO_OutOfMemoryException, throw ( css::io::BufferSizeExceededException )
I_FIFO_OutOfBoundsException )
{ {
try writeAt(getSize(), seq);
{
writeAt(getSize(), seq );
}
catch( IRingBuffer_OutOfMemoryException & )
{
throw I_FIFO_OutOfMemoryException();
}
catch( IRingBuffer_OutOfBoundsException & )
{
throw I_FIFO_OutOfBoundsException();
}
} }
void MemFIFO::read( Sequence<sal_Int8> &seq , sal_Int32 nBufferLen ) throw (I_FIFO_OutOfBoundsException) void MemFIFO::read( Sequence<sal_Int8> &seq , sal_Int32 nBufferLen ) throw (css::io::BufferSizeExceededException)
{ {
try readAt(0, seq , nBufferLen);
{ forgetFromStart( nBufferLen );
readAt(0, seq , nBufferLen);
forgetFromStart( nBufferLen );
}
catch ( IRingBuffer_OutOfBoundsException & )
{
throw I_FIFO_OutOfBoundsException();
}
} }
void MemFIFO::skip( sal_Int32 nBytesToSkip ) throw ( I_FIFO_OutOfBoundsException ) void MemFIFO::skip( sal_Int32 nBytesToSkip ) throw ( css::io::BufferSizeExceededException )
{ {
try forgetFromStart( nBytesToSkip );
{
forgetFromStart( nBytesToSkip );
}
catch( IRingBuffer_OutOfBoundsException & )
{
throw I_FIFO_OutOfBoundsException();
}
} }
MemRingBuffer::MemRingBuffer() MemRingBuffer::MemRingBuffer()
{ {
m_nBufferLen = 0; m_nBufferLen = 0;
...@@ -92,7 +64,7 @@ MemRingBuffer::~MemRingBuffer() ...@@ -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; sal_Int32 nNewLen = 1;
...@@ -108,7 +80,8 @@ void MemRingBuffer::resizeBuffer( sal_Int32 nMinSize ) throw( IRingBuffer_OutOfM ...@@ -108,7 +80,8 @@ void MemRingBuffer::resizeBuffer( sal_Int32 nMinSize ) throw( IRingBuffer_OutOfM
if( nNewLen != m_nBufferLen ) { if( nNewLen != m_nBufferLen ) {
m_p = static_cast<sal_Int8 *>(rtl_reallocateMemory( m_p , nNewLen )); m_p = static_cast<sal_Int8 *>(rtl_reallocateMemory( m_p , nNewLen ));
if( !m_p ) { if( !m_p ) {
throw IRingBuffer_OutOfMemoryException(); throw css::io::BufferSizeExceededException(
"MemRingBuffer::resizeBuffer BufferSizeExceededException");
} }
if( m_nStart + m_nOccupiedBuffer > m_nBufferLen ) { if( m_nStart + m_nOccupiedBuffer > m_nBufferLen ) {
...@@ -121,10 +94,11 @@ void MemRingBuffer::resizeBuffer( sal_Int32 nMinSize ) throw( IRingBuffer_OutOfM ...@@ -121,10 +94,11 @@ void MemRingBuffer::resizeBuffer( sal_Int32 nMinSize ) throw( IRingBuffer_OutOfM
void MemRingBuffer::readAt( sal_Int32 nPos, Sequence<sal_Int8> &seq , sal_Int32 nBytesToRead ) const void MemRingBuffer::readAt( sal_Int32 nPos, Sequence<sal_Int8> &seq , sal_Int32 nBytesToRead ) const
throw(IRingBuffer_OutOfBoundsException) throw(css::io::BufferSizeExceededException)
{ {
if( nPos + nBytesToRead > m_nOccupiedBuffer ) { if( nPos + nBytesToRead > m_nOccupiedBuffer ) {
throw IRingBuffer_OutOfBoundsException(); throw css::io::BufferSizeExceededException(
"MemRingBuffer::readAt BufferSizeExceededException");
} }
sal_Int32 nStartReadingPos = nPos + m_nStart; sal_Int32 nStartReadingPos = nPos + m_nStart;
...@@ -146,15 +120,15 @@ void MemRingBuffer::readAt( sal_Int32 nPos, Sequence<sal_Int8> &seq , sal_Int32 ...@@ -146,15 +120,15 @@ void MemRingBuffer::readAt( sal_Int32 nPos, Sequence<sal_Int8> &seq , sal_Int32
void MemRingBuffer::writeAt( sal_Int32 nPos, const Sequence<sal_Int8> &seq ) void MemRingBuffer::writeAt( sal_Int32 nPos, const Sequence<sal_Int8> &seq )
throw (IRingBuffer_OutOfBoundsException, throw (css::io::BufferSizeExceededException)
IRingBuffer_OutOfMemoryException )
{ {
checkInvariants(); checkInvariants();
sal_Int32 nLen = seq.getLength(); sal_Int32 nLen = seq.getLength();
if( nPos < 0 || nPos > std::numeric_limits< sal_Int32 >::max() - nLen ) 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 ) { if( nPos + nLen - m_nOccupiedBuffer > 0 ) {
...@@ -187,11 +161,12 @@ sal_Int32 MemRingBuffer::getSize() const throw() ...@@ -187,11 +161,12 @@ sal_Int32 MemRingBuffer::getSize() const throw()
return m_nOccupiedBuffer; return m_nOccupiedBuffer;
} }
void MemRingBuffer::forgetFromStart( sal_Int32 nBytesToForget ) throw (IRingBuffer_OutOfBoundsException) void MemRingBuffer::forgetFromStart( sal_Int32 nBytesToForget ) throw (css::io::BufferSizeExceededException)
{ {
checkInvariants(); checkInvariants();
if( nBytesToForget > m_nOccupiedBuffer ) { if( nBytesToForget > m_nOccupiedBuffer ) {
throw IRingBuffer_OutOfBoundsException(); throw css::io::BufferSizeExceededException(
"MemRingBuffer::forgetFromStart BufferSizeExceededException");
} }
m_nStart += nBytesToForget; m_nStart += nBytesToForget;
if( m_nStart >= m_nBufferLen ) { if( m_nStart >= m_nBufferLen ) {
......
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
#ifndef INCLUDED_IO_SOURCE_STM_STREAMHELPER_HXX #ifndef INCLUDED_IO_SOURCE_STM_STREAMHELPER_HXX
#define INCLUDED_IO_SOURCE_STM_STREAMHELPER_HXX #define INCLUDED_IO_SOURCE_STM_STREAMHELPER_HXX
#include <com/sun/star/io/BufferSizeExceededException.hpp>
// Save NDEBUG state // Save NDEBUG state
#ifdef NDEBUG #ifdef NDEBUG
#define STREAMHELPER_HXX_HAD_NDEBUG #define STREAMHELPER_HXX_HAD_NDEBUG
...@@ -37,14 +39,6 @@ ...@@ -37,14 +39,6 @@
namespace io_stm namespace io_stm
{ {
class IRingBuffer_OutOfBoundsException :
public Exception
{};
class IRingBuffer_OutOfMemoryException :
public Exception
{};
class MemRingBuffer class MemRingBuffer
{ {
public: public:
...@@ -56,18 +50,17 @@ public: ...@@ -56,18 +50,17 @@ public:
* data is written beyond end. * data is written beyond end.
***/ ***/
void writeAt( sal_Int32 nPos, const Sequence<sal_Int8> &) void writeAt( sal_Int32 nPos, const Sequence<sal_Int8> &)
throw( IRingBuffer_OutOfMemoryException, throw(css::io::BufferSizeExceededException);
IRingBuffer_OutOfBoundsException );
void readAt( sal_Int32 nPos, Sequence<sal_Int8> & , sal_Int32 nBytesToRead ) const void readAt( sal_Int32 nPos, Sequence<sal_Int8> & , sal_Int32 nBytesToRead ) const
throw( IRingBuffer_OutOfBoundsException ); throw(css::io::BufferSizeExceededException);
sal_Int32 getSize() const throw(); 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(); virtual void shrink() throw();
private: private:
void resizeBuffer( sal_Int32 nMinSize ) throw( IRingBuffer_OutOfMemoryException ); void resizeBuffer(sal_Int32 nMinSize) throw(css::io::BufferSizeExceededException);
inline void checkInvariants() { inline void checkInvariants() {
assert( m_nBufferLen >= 0 ); assert( m_nBufferLen >= 0 );
assert( m_nOccupiedBuffer >= 0 ); assert( m_nOccupiedBuffer >= 0 );
...@@ -84,24 +77,16 @@ private: ...@@ -84,24 +77,16 @@ private:
}; };
class I_FIFO_OutOfBoundsException :
public Exception
{};
class I_FIFO_OutOfMemoryException :
public Exception
{};
class MemFIFO : class MemFIFO :
private MemRingBuffer private MemRingBuffer
{ {
public: public:
void write( const Sequence<sal_Int8> &) void write( const Sequence<sal_Int8> &)
throw( I_FIFO_OutOfMemoryException, I_FIFO_OutOfBoundsException ); throw( css::io::BufferSizeExceededException );
void read( Sequence<sal_Int8> & , sal_Int32 nBytesToRead ) void read( Sequence<sal_Int8> & , sal_Int32 nBytesToRead )
throw( I_FIFO_OutOfBoundsException ); throw( css::io::BufferSizeExceededException );
void skip( sal_Int32 nBytesToSkip ) void skip( sal_Int32 nBytesToSkip )
throw( I_FIFO_OutOfBoundsException ); throw( css::io::BufferSizeExceededException );
sal_Int32 getSize() const throw() sal_Int32 getSize() const throw()
{ return MemRingBuffer::getSize(); } { return MemRingBuffer::getSize(); }
virtual void shrink() throw() override virtual void shrink() throw() override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment