summaryrefslogtreecommitdiff
path: root/lotuswordpro
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-03-14 12:03:59 +0000
committerCaolán McNamara <caolanm@redhat.com>2017-03-14 12:09:54 +0000
commitd18421575c7f1eb97d08cde6184c082e5ab828c3 (patch)
tree498c7ea8282321a604c569552cfff6dc6a459a05 /lotuswordpro
parentbde834ee6b0cb43cebece47cac55cc9b80aadc24 (diff)
ofz: use std::vector for long buffers
and set size of buffer to successfully read data for short reads Change-Id: I8d132446682104f2a4b8c476b7f2bda188bb3cdf
Diffstat (limited to 'lotuswordpro')
-rw-r--r--lotuswordpro/source/filter/lwpobjstrm.cxx39
-rw-r--r--lotuswordpro/source/filter/lwpobjstrm.hxx3
2 files changed, 12 insertions, 30 deletions
diff --git a/lotuswordpro/source/filter/lwpobjstrm.cxx b/lotuswordpro/source/filter/lwpobjstrm.cxx
index bc968a550f43..398a45dce2a5 100644
--- a/lotuswordpro/source/filter/lwpobjstrm.cxx
+++ b/lotuswordpro/source/filter/lwpobjstrm.cxx
@@ -71,24 +71,16 @@ LwpObjectStream::LwpObjectStream(LwpSvStream *pStrm, bool isCompressed, sal_uInt
if (size >= IO_BUFFERSIZE)
throw std::range_error("bad Object size");
// read object data from stream
- if(m_nBufSize == 0)
- {
- m_pContentBuf = nullptr;
- }
- else
- {
+ if (m_nBufSize > 0)
Read2Buffer();
- }
}
+
/**
* @descr read object data from stream to buffer
*/
void LwpObjectStream::Read2Buffer()
{
- if( m_pContentBuf )
- {
- ReleaseBuffer();
- }
+ ReleaseBuffer();
m_nReadPos = 0;
@@ -98,7 +90,7 @@ void LwpObjectStream::Read2Buffer()
sal_uInt8* pCompressBuffer = xCompressBuf.get();
memset(pCompressBuffer, 0, m_nBufSize);
- m_pStrm->Read(pCompressBuffer, m_nBufSize);
+ m_nBufSize = m_pStrm->Read(pCompressBuffer, m_nBufSize);
sal_uInt8 pTempDst[IO_BUFFERSIZE];
m_nBufSize = DecompressBuffer(pTempDst, pCompressBuffer, m_nBufSize);
@@ -106,13 +98,11 @@ void LwpObjectStream::Read2Buffer()
m_pContentBuf = AllocBuffer(m_nBufSize);
memcpy(m_pContentBuf, pTempDst, m_nBufSize);
- //delete [] pTempDst;
-
}
else
{
m_pContentBuf = AllocBuffer(m_nBufSize);
- m_pStrm->Read(m_pContentBuf, m_nBufSize);
+ m_nBufSize = m_pStrm->Read(m_pContentBuf, m_nBufSize);
}
}
/**
@@ -120,14 +110,12 @@ void LwpObjectStream::Read2Buffer()
*/
sal_uInt8* LwpObjectStream::AllocBuffer(sal_uInt16 size)
{
- if(size<=100)
+ if (size<=100)
{
return m_SmallBuffer;
}
- else
- {
- return new sal_uInt8[size];
- }
+ m_BigBuffer.resize(size);
+ return m_BigBuffer.data();
}
/**
* @descr signal complete to release object buffer
@@ -146,15 +134,8 @@ LwpObjectStream::~LwpObjectStream()
*/
void LwpObjectStream::ReleaseBuffer()
{
-
- if(m_nBufSize>100)
- {
- if(m_pContentBuf)
- {
- delete [] m_pContentBuf;
- m_pContentBuf = nullptr;
- }
- }
+ m_BigBuffer.clear();
+ m_pContentBuf = nullptr;
}
sal_uInt16 LwpObjectStream::remainingSize() const
diff --git a/lotuswordpro/source/filter/lwpobjstrm.hxx b/lotuswordpro/source/filter/lwpobjstrm.hxx
index 83062eebd0e8..28efe29016a3 100644
--- a/lotuswordpro/source/filter/lwpobjstrm.hxx
+++ b/lotuswordpro/source/filter/lwpobjstrm.hxx
@@ -76,11 +76,12 @@ public:
private:
sal_uInt8* m_pContentBuf; //The content buffer of the object
sal_uInt8 m_SmallBuffer[100]; //To avoid frequent new
+ std::vector<sal_uInt8> m_BigBuffer; //otherwise use this
enum
{
IO_BUFFERSIZE = 0xFF00 //Refer to LWP, not sure if it is enough
};
- sal_uInt16 m_nBufSize; //The total size of m_pContentBuf
+ sal_uInt16 m_nBufSize; //The total size of m_pContentBuf
sal_uInt16 m_nReadPos; //The position of the quick read
LwpSvStream* m_pStrm;
bool m_bCompressed;