Kaydet (Commit) ec100b70 authored tarafından Michael Stahl's avatar Michael Stahl

sc: fix infinite loop in XclImpDffConverter::ProcessShGrContainer()

... and also in XclImpDffConverter::ProcessDgContainer()

This was looping in CppunitTest_sc_filters_test, reportedly since
commit 7e8c38b6.

The problem is that checkSeek() doesn't actually seek until EOF
if the offset is too large.

Change-Id: I16226a88388dcac8069d6a4cad860470540466e3
üst ee599ea4
...@@ -3684,7 +3684,8 @@ OUString XclImpDffConverter::ReadHlinkProperty( SvStream& rDffStrm ) const ...@@ -3684,7 +3684,8 @@ OUString XclImpDffConverter::ReadHlinkProperty( SvStream& rDffStrm ) const
void XclImpDffConverter::ProcessDgContainer( SvStream& rDffStrm, const DffRecordHeader& rDgHeader ) void XclImpDffConverter::ProcessDgContainer( SvStream& rDffStrm, const DffRecordHeader& rDgHeader )
{ {
std::size_t nEndPos = rDgHeader.GetRecEndFilePos(); std::size_t nEndPos = rDgHeader.GetRecEndFilePos();
while( rDffStrm.Tell() < nEndPos ) bool isBreak(false);
while (!isBreak && rDffStrm.good() && rDffStrm.Tell() < nEndPos)
{ {
DffRecordHeader aHeader; DffRecordHeader aHeader;
ReadDffRecordHeader( rDffStrm, aHeader ); ReadDffRecordHeader( rDffStrm, aHeader );
...@@ -3697,7 +3698,7 @@ void XclImpDffConverter::ProcessDgContainer( SvStream& rDffStrm, const DffRecord ...@@ -3697,7 +3698,7 @@ void XclImpDffConverter::ProcessDgContainer( SvStream& rDffStrm, const DffRecord
ProcessShGrContainer( rDffStrm, aHeader ); ProcessShGrContainer( rDffStrm, aHeader );
break; break;
default: default:
aHeader.SeekToEndOfRecord( rDffStrm ); isBreak = !aHeader.SeekToEndOfRecord( rDffStrm );
} }
} }
// seek to end of drawing page container // seek to end of drawing page container
...@@ -3713,7 +3714,8 @@ void XclImpDffConverter::ProcessDgContainer( SvStream& rDffStrm, const DffRecord ...@@ -3713,7 +3714,8 @@ void XclImpDffConverter::ProcessDgContainer( SvStream& rDffStrm, const DffRecord
void XclImpDffConverter::ProcessShGrContainer( SvStream& rDffStrm, const DffRecordHeader& rShGrHeader ) void XclImpDffConverter::ProcessShGrContainer( SvStream& rDffStrm, const DffRecordHeader& rShGrHeader )
{ {
std::size_t nEndPos = rShGrHeader.GetRecEndFilePos(); std::size_t nEndPos = rShGrHeader.GetRecEndFilePos();
while( rDffStrm.Tell() < nEndPos ) bool isBreak(false);
while (!isBreak && rDffStrm.good() && rDffStrm.Tell() < nEndPos)
{ {
DffRecordHeader aHeader; DffRecordHeader aHeader;
ReadDffRecordHeader( rDffStrm, aHeader ); ReadDffRecordHeader( rDffStrm, aHeader );
...@@ -3724,7 +3726,7 @@ void XclImpDffConverter::ProcessShGrContainer( SvStream& rDffStrm, const DffReco ...@@ -3724,7 +3726,7 @@ void XclImpDffConverter::ProcessShGrContainer( SvStream& rDffStrm, const DffReco
ProcessShContainer( rDffStrm, aHeader ); ProcessShContainer( rDffStrm, aHeader );
break; break;
default: default:
aHeader.SeekToEndOfRecord( rDffStrm ); isBreak = !aHeader.SeekToEndOfRecord( rDffStrm );
} }
} }
// seek to end of shape group container // seek to end of shape group container
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment