sw/source/filter/html/htmlfld.cxx |   61 ++++++++++++++++++--------------------
 sw/source/filter/html/swhtml.cxx  |    1 
 sw/source/filter/html/swhtml.hxx  |    2 -
 3 files changed, 31 insertions(+), 33 deletions(-)

New commits:
commit 75426421b9ae754dc1144f3c8df3da404183817b
Author: Caolán McNamara <caol...@redhat.com>
Date:   Tue Feb 13 09:11:02 2018 +0000

    ofz#6272 Direct-leak
    
    Change-Id: I98964ebf0f0c91f15af9c38af1f0c4e5f0d85ad8
    Reviewed-on: https://gerrit.libreoffice.org/49625
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

diff --git a/sw/source/filter/html/htmlfld.cxx 
b/sw/source/filter/html/htmlfld.cxx
index d02e48de9082..568f36576a84 100644
--- a/sw/source/filter/html/htmlfld.cxx
+++ b/sw/source/filter/html/htmlfld.cxx
@@ -281,7 +281,7 @@ void SwHTMLParser::NewField()
         nWhich = SwFieldIds::DateTime;
 
     SwFieldType* pType = m_xDoc->getIDocumentFieldsAccess().GetSysFieldType( 
nWhich );
-    SwField *pNewField = nullptr;
+    std::unique_ptr<SwField> xNewField;
     bool bInsOnEndTag = false;
 
     switch( nType )
@@ -297,7 +297,7 @@ void SwHTMLParser::NewField()
                 bInsOnEndTag = true;
             }
             if( pSubOption->GetEnum( nSub, aHTMLExtUsrFieldSubTable ) )
-                pNewField = new 
SwExtUserField(static_cast<SwExtUserFieldType*>(pType), nSub, nFormat);
+                xNewField.reset(new 
SwExtUserField(static_cast<SwExtUserFieldType*>(pType), nSub, nFormat));
         }
         break;
 
@@ -312,7 +312,7 @@ void SwHTMLParser::NewField()
                 bInsOnEndTag = true;
             }
 
-            pNewField = new 
SwAuthorField(static_cast<SwAuthorFieldType*>(pType), nFormat);
+            xNewField.reset(new 
SwAuthorField(static_cast<SwAuthorFieldType*>(pType), nFormat));
         }
         break;
 
@@ -362,10 +362,10 @@ void SwHTMLParser::NewField()
                 nNumFormat = pFormatter->GetFormatIndex( 
pFormatTable[i].eFormat,
                                                       LANGUAGE_SYSTEM);
 
-            pNewField = new SwDateTimeField(static_cast<SwDateTimeFieldType 
*>(pType), nSub, nNumFormat);
+            xNewField.reset(new 
SwDateTimeField(static_cast<SwDateTimeFieldType *>(pType), nSub, nNumFormat));
 
             if (nSub & FIXEDFLD)
-                static_cast<SwDateTimeField 
*>(pNewField)->SetDateTime(DateTime(Date(nDate), tools::Time(nTime)));
+                static_cast<SwDateTimeField 
*>(xNewField.get())->SetDateTime(DateTime(Date(nDate), tools::Time(nTime)));
         }
         break;
 
@@ -393,9 +393,9 @@ void SwHTMLParser::NewField()
                 if( bHasNumValue )
                     nSub |= FIXEDFLD;
 
-                pNewField = new 
SwDateTimeField(static_cast<SwDateTimeFieldType *>(pType), nSub, nNumFormat);
+                xNewField.reset(new 
SwDateTimeField(static_cast<SwDateTimeFieldType *>(pType), nSub, nNumFormat));
                 if (bHasNumValue)
-                    static_cast<SwDateTimeField 
*>(pNewField)->SetValue(dValue);
+                    
static_cast<SwDateTimeField*>(xNewField.get())->SetValue(dValue);
             }
         }
         break;
@@ -423,9 +423,9 @@ void SwHTMLParser::NewField()
                     nSub==PG_RANDOM )
                     nFormat = SVX_NUM_PAGEDESC;
 
-                pNewField = new 
SwPageNumberField(static_cast<SwPageNumberFieldType*>(pType), nSub, nFormat, 
nOff);
+                xNewField.reset(new 
SwPageNumberField(static_cast<SwPageNumberFieldType*>(pType), nSub, nFormat, 
nOff));
                 if (nFormat == SVX_NUM_CHAR_SPECIAL)
-                    static_cast<SwPageNumberField 
*>(pNewField)->SetUserString(aValue);
+                    
static_cast<SwPageNumberField*>(xNewField.get())->SetUserString(aValue);
             }
         }
         break;
@@ -473,9 +473,9 @@ void SwHTMLParser::NewField()
                     bInsOnEndTag = true;
                 }
 
-                pNewField = new SwDocInfoField(static_cast<SwDocInfoFieldType 
*>(pType), nSub, aName, nNumFormat);
+                xNewField.reset(new 
SwDocInfoField(static_cast<SwDocInfoFieldType *>(pType), nSub, aName, 
nNumFormat));
                 if (bHasNumValue)
-                    static_cast<SwDocInfoField*>(pNewField)->SetValue(dValue);
+                    
static_cast<SwDocInfoField*>(xNewField.get())->SetValue(dValue);
             }
         }
         break;
@@ -489,7 +489,7 @@ void SwHTMLParser::NewField()
                 SvxNumType nFormat = SVX_NUM_ARABIC;
                 if( pFormatOption )
                     pFormatOption->GetEnum( nFormat, 
aHTMLPageNumFieldFormatTable );
-                pNewField = new 
SwDocStatField(static_cast<SwDocStatFieldType*>(pType), nSub, nFormat);
+                xNewField.reset(new 
SwDocStatField(static_cast<SwDocStatFieldType*>(pType), nSub, nFormat));
                 m_bUpdateDocStat |= (DS_PAGE != nSub);
             }
         }
@@ -506,23 +506,23 @@ void SwHTMLParser::NewField()
                 bInsOnEndTag = true;
             }
 
-            pNewField = new 
SwFileNameField(static_cast<SwFileNameFieldType*>(pType), nFormat);
+            xNewField.reset(new 
SwFileNameField(static_cast<SwFileNameFieldType*>(pType), nFormat));
         }
         break;
     default:
         ;
     }
 
-    if (pNewField)
+    if (xNewField)
     {
         if (bInsOnEndTag)
         {
-            m_pField = pNewField;
+            m_xField = std::move(xNewField);
         }
         else
         {
-            m_xDoc->getIDocumentContentOperations().InsertPoolItem(*m_pPam, 
SwFormatField(*pNewField));
-            delete pNewField;
+            m_xDoc->getIDocumentContentOperations().InsertPoolItem(*m_pPam, 
SwFormatField(*xNewField));
+            xNewField.reset();
         }
         m_bInField = true;
     }
@@ -530,39 +530,38 @@ void SwHTMLParser::NewField()
 
 void SwHTMLParser::EndField()
 {
-    if( m_pField )
+    if (m_xField)
     {
-        switch( m_pField->Which() )
+        switch (m_xField->Which())
         {
         case SwFieldIds::DocInfo:
-            OSL_ENSURE( static_cast<SwDocInfoField*>(m_pField)->IsFixed(),
+            OSL_ENSURE( 
static_cast<SwDocInfoField*>(m_xField.get())->IsFixed(),
                     "Field DocInfo should not have been saved" );
-            static_cast<SwDocInfoField*>(m_pField)->SetExpansion( m_aContents 
);
+            static_cast<SwDocInfoField*>(m_xField.get())->SetExpansion( 
m_aContents );
             break;
 
         case SwFieldIds::ExtUser:
-            OSL_ENSURE( static_cast<SwExtUserField*>(m_pField)->IsFixed(),
+            OSL_ENSURE( 
static_cast<SwExtUserField*>(m_xField.get())->IsFixed(),
                     "Field ExtUser should not have been saved" );
-            static_cast<SwExtUserField*>(m_pField)->SetExpansion( m_aContents 
);
+            static_cast<SwExtUserField*>(m_xField.get())->SetExpansion( 
m_aContents );
             break;
 
         case SwFieldIds::Author:
-            OSL_ENSURE( static_cast<SwAuthorField*>(m_pField)->IsFixed(),
+            OSL_ENSURE( static_cast<SwAuthorField*>(m_xField.get())->IsFixed(),
                     "Field Author should not have been saved" );
-            static_cast<SwAuthorField*>(m_pField)->SetExpansion( m_aContents );
+            static_cast<SwAuthorField*>(m_xField.get())->SetExpansion( 
m_aContents );
             break;
 
         case SwFieldIds::Filename:
-            OSL_ENSURE( static_cast<SwFileNameField*>(m_pField)->IsFixed(),
+            OSL_ENSURE( 
static_cast<SwFileNameField*>(m_xField.get())->IsFixed(),
                     "Field FileName should not have been saved" );
-            static_cast<SwFileNameField*>(m_pField)->SetExpansion( m_aContents 
);
+            static_cast<SwFileNameField*>(m_xField.get())->SetExpansion( 
m_aContents );
             break;
         default: break;
         }
 
-        m_xDoc->getIDocumentContentOperations().InsertPoolItem( *m_pPam, 
SwFormatField(*m_pField) );
-        delete m_pField;
-        m_pField = nullptr;
+        m_xDoc->getIDocumentContentOperations().InsertPoolItem( *m_pPam, 
SwFormatField(*m_xField) );
+        m_xField.reset();
     }
 
     m_bInField = false;
@@ -571,7 +570,7 @@ void SwHTMLParser::EndField()
 
 void SwHTMLParser::InsertFieldText()
 {
-    if( m_pField )
+    if (m_xField)
     {
         // append the current text part to the text
         m_aContents += aToken;
diff --git a/sw/source/filter/html/swhtml.cxx b/sw/source/filter/html/swhtml.cxx
index 4586686e1693..fa5b976506a4 100644
--- a/sw/source/filter/html/swhtml.cxx
+++ b/sw/source/filter/html/swhtml.cxx
@@ -264,7 +264,6 @@ SwHTMLParser::SwHTMLParser( SwDoc* pD, SwPaM& rCursor, 
SvStream& rIn,
     m_pSttNdIdx( nullptr ),
     m_pFormImpl( nullptr ),
     m_pMarquee( nullptr ),
-    m_pField( nullptr ),
     m_pImageMap( nullptr ),
     m_pImageMaps(nullptr),
     m_pFootEndNoteImpl( nullptr ),
diff --git a/sw/source/filter/html/swhtml.hxx b/sw/source/filter/html/swhtml.hxx
index 585b42e07c03..82fdb4994faf 100644
--- a/sw/source/filter/html/swhtml.hxx
+++ b/sw/source/filter/html/swhtml.hxx
@@ -425,7 +425,7 @@ class SwHTMLParser : public SfxHTMLParser, public SwClient
     std::shared_ptr<HTMLTable> m_xTable; // current "outermost" table
     SwHTMLForm_Impl *m_pFormImpl;   // current form
     SdrObject       *m_pMarquee;    // current marquee
-    SwField         *m_pField;      // current field
+    std::unique_ptr<SwField> m_xField; // current field
     ImageMap        *m_pImageMap;   // current image map
     ImageMaps       *m_pImageMaps;  ///< all Image-Maps that have been read
     SwHTMLFootEndNote_Impl *m_pFootEndNoteImpl;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to