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