ofz#1078 cgm infinite recurse

Change-Id: I6ba4c6a432f1dd150591f8d9b0f03e248a97c33e
diff --git a/filter/source/graphicfilter/icgm/cgm.cxx b/filter/source/graphicfilter/icgm/cgm.cxx
index 714c4d7..d3669fe 100644
--- a/filter/source/graphicfilter/icgm/cgm.cxx
+++ b/filter/source/graphicfilter/icgm/cgm.cxx
@@ -51,6 +51,7 @@ CGM::CGM(uno::Reference< frame::XModel > const & rModel)
    , mbPictureBody(false)
    , mbFigure(false)
    , mbFirstOutPut(false)
    , mbInDefaultReplacement(false)
    , mnAct4PostReset(0)
    , mpBitmapInUse(nullptr)
    , mpChart(nullptr)
@@ -620,8 +621,16 @@ void CGM::ImplDoClass()

void CGM::ImplDefaultReplacement()
{
    if ( !maDefRepList.empty() )
    if (!maDefRepList.empty())
    {
        if (mbInDefaultReplacement)
        {
            SAL_WARN("filter", "recursion in ImplDefaultReplacement");
            return;
        }

        mbInDefaultReplacement = true;

        sal_uInt32  nOldEscape = mnEscape;
        sal_uInt32  nOldElementClass = mnElementClass;
        sal_uInt32  nOldElementID = mnElementID;
@@ -663,6 +672,8 @@ void CGM::ImplDefaultReplacement()
        mnParaSize = mnElementSize = nOldElementSize;
        mpSource = pOldBuf;
        mpEndValidSource = pOldEndValidSource;

        mbInDefaultReplacement = false;
    }
}

diff --git a/filter/source/graphicfilter/icgm/cgm.hxx b/filter/source/graphicfilter/icgm/cgm.hxx
index 4da49ea..a7c5d04 100644
--- a/filter/source/graphicfilter/icgm/cgm.hxx
+++ b/filter/source/graphicfilter/icgm/cgm.hxx
@@ -64,7 +64,8 @@ class CGM
        bool                mbPictureBody;
        bool                mbFigure;
        bool                mbFirstOutPut;
        sal_uInt32              mnAct4PostReset;
        bool                mbInDefaultReplacement;
        sal_uInt32          mnAct4PostReset;
        CGMBitmap*          mpBitmapInUse;
        CGMChart*           mpChart;                // if sal_True->"SHWSLIDEREC"
                                                    //  otherwise "BEGINPIC" commands
diff --git a/sd/qa/unit/data/cgm/fail/recurse-1.cgm b/sd/qa/unit/data/cgm/fail/recurse-1.cgm
new file mode 100644
index 0000000..4ba3b95
--- /dev/null
+++ b/sd/qa/unit/data/cgm/fail/recurse-1.cgm
Binary files differ