[Libreoffice-commits] core.git: filter/source
Caolán McNamara
caolanm at redhat.com
Fri Jan 13 16:50:53 UTC 2017
filter/source/graphicfilter/ios2met/ios2met.cxx | 113 +++++++++++-------------
1 file changed, 55 insertions(+), 58 deletions(-)
New commits:
commit 9e3d5996b919dfaacc152fd055e6d2250f56de47
Author: Caolán McNamara <caolanm at redhat.com>
Date: Fri Jan 13 16:39:47 2017 +0000
fix met leaks
Change-Id: Ic26d70cd967324432d0b5fbd7346cfee9f1d305e
diff --git a/filter/source/graphicfilter/ios2met/ios2met.cxx b/filter/source/graphicfilter/ios2met/ios2met.cxx
index e5e5e6d..751217c 100644
--- a/filter/source/graphicfilter/ios2met/ios2met.cxx
+++ b/filter/source/graphicfilter/ios2met/ios2met.cxx
@@ -371,7 +371,7 @@ private:
OSAttr aAttr;
OSAttr * pAttrStack;
- SvStream * pOrdFile;
+ std::unique_ptr<SvStream> xOrdFile;
void AddPointsToPath(const tools::Polygon & rPoly);
void AddPointsToArea(const tools::Polygon & rPoly);
@@ -450,12 +450,54 @@ OS2METReader::OS2METReader()
, aDefAttr()
, aAttr()
, pAttrStack(nullptr)
- , pOrdFile(nullptr)
{
}
OS2METReader::~OS2METReader()
{
+ while (pAreaStack!=nullptr) {
+ OSArea * p=pAreaStack;
+ pAreaStack=p->pSucc;
+ delete p;
+ }
+
+ while (pPathStack!=nullptr) {
+ OSPath * p=pPathStack;
+ pPathStack=p->pSucc;
+ delete p;
+ }
+
+ while (pPathList!=nullptr) {
+ OSPath * p=pPathList;
+ pPathList=p->pSucc;
+ delete p;
+ }
+
+ while (pFontList!=nullptr) {
+ OSFont * p=pFontList;
+ pFontList=p->pSucc;
+ delete p;
+ }
+
+ while (pBitmapList!=nullptr) {
+ OSBitmap * p=pBitmapList;
+ pBitmapList=p->pSucc;
+ if (p->pBMP!=nullptr) delete p->pBMP;
+ delete p;
+ }
+
+ while (pAttrStack!=nullptr) {
+ OSAttr * p=pAttrStack;
+ pAttrStack=p->pSucc;
+ delete p;
+ }
+
+ while (pPaletteStack!=nullptr) {
+ OSPalette * p=pPaletteStack;
+ pPaletteStack=p->pSucc;
+ if (p->p0RGB!=nullptr) delete[] p->p0RGB;
+ delete p;
+ }
}
bool OS2METReader::IsLineInfo()
@@ -2509,15 +2551,16 @@ void OS2METReader::ReadField(sal_uInt16 nFieldType, sal_uInt16 nFieldSize)
sal_uInt16 nOrderID, nOrderLen;
sal_uInt8 nbyte;
- if (pOrdFile==nullptr) break;
+ if (!xOrdFile)
+ break;
- // In pOrdFile all "DatGrfObj" fields were collected so that the
+ // In xOrdFile all "DatGrfObj" fields were collected so that the
// therein contained "Orders" are continuous and not segmented by fields.
// To read them from the memory stream without having any trouble,
// we use a little trick:
pSave=pOS2MET;
- pOS2MET=pOrdFile; //(!)
+ pOS2MET=xOrdFile.get(); //(!)
nMaxPos=pOS2MET->Tell();
pOS2MET->Seek(0);
@@ -2560,11 +2603,11 @@ void OS2METReader::ReadField(sal_uInt16 nFieldType, sal_uInt16 nFieldSize)
}
pOS2MET=pSave;
- if (pOrdFile->GetError()) {
+ if (xOrdFile->GetError()) {
pOS2MET->SetError(SVSTREAM_FILEFORMAT_ERROR);
ErrorCode=10;
}
- delete pOrdFile; pOrdFile=nullptr;
+ xOrdFile.reset();
break;
}
case DscGrfObjMagic: {
@@ -2583,13 +2626,13 @@ void OS2METReader::ReadField(sal_uInt16 nFieldType, sal_uInt16 nFieldSize)
break;
}
case DatGrfObjMagic: {
- if (pOrdFile==nullptr) {
- pOrdFile = new SvMemoryStream;
- pOrdFile->SetEndian(SvStreamEndian::LITTLE);
+ if (!xOrdFile) {
+ xOrdFile.reset(new SvMemoryStream);
+ xOrdFile->SetEndian(SvStreamEndian::LITTLE);
}
std::unique_ptr<sal_uInt8[]> pBuf(new sal_uInt8[nFieldSize]);
pOS2MET->ReadBytes(pBuf.get(), nFieldSize);
- pOrdFile->WriteBytes(pBuf.get(), nFieldSize);
+ xOrdFile->WriteBytes(pBuf.get(), nFieldSize);
break;
}
case MapCodFntMagic:
@@ -2657,7 +2700,7 @@ void OS2METReader::ReadOS2MET( SvStream & rStreamOS2MET, GDIMetaFile & rGDIMetaF
aAttr=aDefAttr;
- pOrdFile=nullptr;
+ xOrdFile.reset();
pVirDev = VclPtr<VirtualDevice>::Create();
pVirDev->EnableOutput(false);
@@ -2732,52 +2775,6 @@ void OS2METReader::ReadOS2MET( SvStream & rStreamOS2MET, GDIMetaFile & rGDIMetaF
rGDIMetaFile.SetPrefSize( aCalcBndRect.GetSize() );
}
- if (pOrdFile!=nullptr) delete pOrdFile;
-
- while (pAreaStack!=nullptr) {
- OSArea * p=pAreaStack;
- pAreaStack=p->pSucc;
- delete p;
- }
-
- while (pPathStack!=nullptr) {
- OSPath * p=pPathStack;
- pPathStack=p->pSucc;
- delete p;
- }
-
- while (pPathList!=nullptr) {
- OSPath * p=pPathList;
- pPathList=p->pSucc;
- delete p;
- }
-
- while (pFontList!=nullptr) {
- OSFont * p=pFontList;
- pFontList=p->pSucc;
- delete p;
- }
-
- while (pBitmapList!=nullptr) {
- OSBitmap * p=pBitmapList;
- pBitmapList=p->pSucc;
- if (p->pBMP!=nullptr) delete p->pBMP;
- delete p;
- }
-
- while (pAttrStack!=nullptr) {
- OSAttr * p=pAttrStack;
- pAttrStack=p->pSucc;
- delete p;
- }
-
- while (pPaletteStack!=nullptr) {
- OSPalette * p=pPaletteStack;
- pPaletteStack=p->pSucc;
- if (p->p0RGB!=nullptr) delete[] p->p0RGB;
- delete p;
- }
-
pOS2MET->SetEndian(nOrigNumberFormat);
if (pOS2MET->GetError()) {
More information about the Libreoffice-commits
mailing list