diff options
Diffstat (limited to 'sw/source/filter/ww8/ww8scan.cxx')
-rw-r--r-- | sw/source/filter/ww8/ww8scan.cxx | 1072 |
1 files changed, 528 insertions, 544 deletions
diff --git a/sw/source/filter/ww8/ww8scan.cxx b/sw/source/filter/ww8/ww8scan.cxx index c37ccf2d1470..80f9102dcb1b 100644 --- a/sw/source/filter/ww8/ww8scan.cxx +++ b/sw/source/filter/ww8/ww8scan.cxx @@ -44,10 +44,6 @@ #include <vcl/settings.hxx> #include <vcl/svapp.hxx> -#ifdef DEBUGSPRMREADER -#include <stdio.h> -#endif - using namespace ::com::sun::star::lang; namespace @@ -63,7 +59,7 @@ namespace bool TestBeltAndBraces(SvStream& rStrm) { bool bRet = false; - sal_uInt32 nOldPos = rStrm.Tell(); + sal_uInt64 nOldPos = rStrm.Tell(); sal_uInt16 nBelt(0); rStrm.ReadUInt16( nBelt ); nBelt *= sizeof(sal_Unicode); @@ -216,7 +212,7 @@ const wwSprmSearcher *wwSprmParser::GetWW2SprmSearcher() {147, { 2, L_FIX} }, // "sprmTDxaLeft" tap.rgdxaCenter dxa word {148, { 2, L_FIX} }, // "sprmTDxaGapHalf" tap.dxaGapHalf, tap.rgdxaCenter {149, { 1, L_FIX} }, // "sprmTFBiDi" ;;; - {152, { 0, L_VAR} }, // "sprmTDefTable10" tap.rgdxaCenter, tap.rgtc complex + {152, { 0, L_VAR2} },// "sprmTDefTable10" tap.rgdxaCenter, tap.rgtc complex {153, { 2, L_FIX} }, // "sprmTDyaRowHeight" tap.dyaRowHeight dya word {154, { 0, L_VAR2} },// "sprmTDefTable" tap.rgtc complex {155, { 1, L_VAR} }, // "sprmTDefTableShd" tap.rgshd complex @@ -397,7 +393,7 @@ const wwSprmSearcher *wwSprmParser::GetWW6SprmSearcher(const WW8Fib& rFib) {NS_sprm::v6::sprmTFCantSplit, { 1, L_FIX} }, // tap.fCantSplit 1 or 0 byte {NS_sprm::v6::sprmTTableHeader, { 1, L_FIX} }, // tap.fTableHeader 1 or 0 byte {NS_sprm::v6::sprmTTableBorders, {12, L_FIX} }, // tap.rgbrcTable complex 12 bytes - {NS_sprm::v6::sprmTDefTable10, { 0, L_VAR} }, // tap.rgdxaCenter, tap.rgtc complex + {NS_sprm::v6::sprmTDefTable10, { 0, L_VAR2} }, // tap.rgdxaCenter, tap.rgtc complex {NS_sprm::v6::sprmTDyaRowHeight, { 2, L_FIX} }, // tap.dyaRowHeight dya word {NS_sprm::v6::sprmTDefTable, { 0, L_VAR2} }, // tap.rgtc complex {NS_sprm::v6::sprmTDefTableShd, { 1, L_VAR} }, // tap.rgshd complex @@ -701,10 +697,10 @@ const wwSprmSearcher *wwSprmParser::GetWW8SprmSearcher() InfoRow<NS_sprm::TTableHeader>(), // tap.fTableHeader;1 or 0;byte; InfoRow<NS_sprm::TFCantSplit>(), // tap.fCantSplit;1 or 0;byte; InfoRow<NS_sprm::TTableBorders80>(), // tap.rgbrcTable;complex - {NS_sprm::LN_TDefTable10, { 0, L_VAR} }, // "sprmTDefTable10" tap.rgdxaCenter, + {NS_sprm::LN_TDefTable10, { 0, L_VAR2} }, // "sprmTDefTable10" tap.rgdxaCenter, // tap.rgtc;complex InfoRow<NS_sprm::TDyaRowHeight>(), // tap.dyaRowHeight;dya;word; - InfoRow<NS_sprm::TDefTable>(), // tap.rgtc;complex + {NS_sprm::LN_TDefTable, { 0, L_VAR2} }, // "sprmTDefTable" tap.rgtc;complex InfoRow<NS_sprm::TDefTableShd80>(), // tap.rgshd;complex InfoRow<NS_sprm::TTlp>(), // tap.tlp;TLP;4 bytes; InfoRow<NS_sprm::TFBiDi>(), // ;;; @@ -874,50 +870,50 @@ static sal_Int32 Get_Long( sal_uInt8 *& p ) WW8SprmIter::WW8SprmIter(const sal_uInt8* pSprms_, sal_Int32 nLen_, const wwSprmParser &rParser) - : mrSprmParser(rParser), pSprms( pSprms_), nRemLen( nLen_) + : mrSprmParser(rParser), m_pSprms( pSprms_), m_nRemLen( nLen_) { UpdateMyMembers(); } void WW8SprmIter::SetSprms(const sal_uInt8* pSprms_, sal_Int32 nLen_) { - pSprms = pSprms_; - nRemLen = nLen_; + m_pSprms = pSprms_; + m_nRemLen = nLen_; UpdateMyMembers(); } void WW8SprmIter::advance() { - if (nRemLen > 0 ) + if (m_nRemLen > 0 ) { - sal_uInt16 nSize = nCurrentSize; - if (nSize > nRemLen) - nSize = nRemLen; - pSprms += nSize; - nRemLen -= nSize; + sal_uInt16 nSize = m_nCurrentSize; + if (nSize > m_nRemLen) + nSize = m_nRemLen; + m_pSprms += nSize; + m_nRemLen -= nSize; UpdateMyMembers(); } } void WW8SprmIter::UpdateMyMembers() { - bool bValid = (pSprms && nRemLen >= mrSprmParser.MinSprmLen()); + bool bValid = (m_pSprms && m_nRemLen >= mrSprmParser.MinSprmLen()); if (bValid) { - nCurrentId = mrSprmParser.GetSprmId(pSprms); - nCurrentSize = mrSprmParser.GetSprmSize(nCurrentId, pSprms, nRemLen); - pCurrentParams = pSprms + mrSprmParser.DistanceToData(nCurrentId); - bValid = nCurrentSize <= nRemLen; + m_nCurrentId = mrSprmParser.GetSprmId(m_pSprms); + m_nCurrentSize = mrSprmParser.GetSprmSize(m_nCurrentId, m_pSprms, m_nRemLen); + m_pCurrentParams = m_pSprms + mrSprmParser.DistanceToData(m_nCurrentId); + bValid = m_nCurrentSize <= m_nRemLen; SAL_WARN_IF(!bValid, "sw.ww8", "sprm longer than remaining bytes, doc or parser is wrong"); } if (!bValid) { - nCurrentId = 0; - pCurrentParams = nullptr; - nCurrentSize = 0; - nRemLen = 0; + m_nCurrentId = 0; + m_pCurrentParams = nullptr; + m_nCurrentSize = 0; + m_nRemLen = 0; } } @@ -952,8 +948,8 @@ SprmResult WW8SprmIter::FindSprm(sal_uInt16 nId, bool bFindFirst, const sal_uInt // All methods relating to iterators are therefore dummies. WW8PLCFx_PCDAttrs::WW8PLCFx_PCDAttrs(const WW8Fib& rFib, WW8PLCFx_PCD* pPLCFx_PCD, const WW8ScannerBase* pBase) - : WW8PLCFx(rFib, true), pPcdI(pPLCFx_PCD->GetPLCFIter()), - pPcd(pPLCFx_PCD), mrGrpprls(pBase->m_aPieceGrpprls) + : WW8PLCFx(rFib, true), m_pPcdI(pPLCFx_PCD->GetPLCFIter()), + m_pPcd(pPLCFx_PCD), mrGrpprls(pBase->m_aPieceGrpprls) { } @@ -977,7 +973,7 @@ void WW8PLCFx_PCDAttrs::advance() WW8_CP WW8PLCFx_PCDAttrs::Where() { - return pPcd ? pPcd->Where() : WW8_CP_MAX; + return m_pPcd ? m_pPcd->Where() : WW8_CP_MAX; } void WW8PLCFx_PCDAttrs::GetSprms(WW8PLCFxDesc* p) @@ -985,7 +981,7 @@ void WW8PLCFx_PCDAttrs::GetSprms(WW8PLCFxDesc* p) void* pData; p->bRealLineEnd = false; - if ( !pPcdI || !pPcdI->Get(p->nStartPos, p->nEndPos, pData) ) + if ( !m_pPcdI || !m_pPcdI->Get(p->nStartPos, p->nEndPos, pData) ) { // PLCF fully processed p->nStartPos = p->nEndPos = WW8_CP_MAX; @@ -1023,12 +1019,12 @@ void WW8PLCFx_PCDAttrs::GetSprms(WW8PLCFxDesc* p) if (IsSevenMinus(GetFIBVersion())) { - aShortSprm[0] = static_cast<sal_uInt8>( ( nPrm & 0xfe) >> 1 ); - aShortSprm[1] = static_cast<sal_uInt8>( nPrm >> 8 ); + m_aShortSprm[0] = static_cast<sal_uInt8>( ( nPrm & 0xfe) >> 1 ); + m_aShortSprm[1] = static_cast<sal_uInt8>( nPrm >> 8 ); p->nSprmsLen = nPrm ? 2 : 0; // length // store Position of internal mini storage in Data Pointer - p->pMemPos = aShortSprm; + p->pMemPos = m_aShortSprm; } else { @@ -1120,15 +1116,15 @@ void WW8PLCFx_PCDAttrs::GetSprms(WW8PLCFxDesc* p) if( nSprmId ) { // move Sprm Id and Sprm Param to internal mini storage: - aShortSprm[0] = static_cast<sal_uInt8>( nSprmId & 0x00ff) ; - aShortSprm[1] = static_cast<sal_uInt8>( ( nSprmId & 0xff00) >> 8 ); - aShortSprm[2] = static_cast<sal_uInt8>( nPrm >> 8 ); + m_aShortSprm[0] = static_cast<sal_uInt8>( nSprmId & 0x00ff) ; + m_aShortSprm[1] = static_cast<sal_uInt8>( ( nSprmId & 0xff00) >> 8 ); + m_aShortSprm[2] = static_cast<sal_uInt8>( nPrm >> 8 ); // store Sprm Length in member: p->nSprmsLen = nPrm ? 3 : 0; // store Position of internal mini storage in Data Pointer - p->pMemPos = aShortSprm; + p->pMemPos = m_aShortSprm; } } } @@ -1137,11 +1133,11 @@ void WW8PLCFx_PCDAttrs::GetSprms(WW8PLCFxDesc* p) WW8PLCFx_PCD::WW8PLCFx_PCD(const WW8Fib& rFib, WW8PLCFpcd* pPLCFpcd, WW8_CP nStartCp, bool bVer67P) - : WW8PLCFx(rFib, false), nClipStart(-1) + : WW8PLCFx(rFib, false), m_nClipStart(-1) { // construct own iterator - pPcdI.reset( new WW8PLCFpcd_Iter(*pPLCFpcd, nStartCp) ); - bVer67= bVer67P; + m_pPcdI.reset( new WW8PLCFpcd_Iter(*pPLCFpcd, nStartCp) ); + m_bVer67= bVer67P; } WW8PLCFx_PCD::~WW8PLCFx_PCD() @@ -1150,28 +1146,28 @@ WW8PLCFx_PCD::~WW8PLCFx_PCD() sal_uInt32 WW8PLCFx_PCD::GetIMax() const { - return pPcdI ? pPcdI->GetIMax() : 0; + return m_pPcdI ? m_pPcdI->GetIMax() : 0; } sal_uInt32 WW8PLCFx_PCD::GetIdx() const { - return pPcdI ? pPcdI->GetIdx() : 0; + return m_pPcdI ? m_pPcdI->GetIdx() : 0; } void WW8PLCFx_PCD::SetIdx(sal_uInt32 nIdx) { - if (pPcdI) - pPcdI->SetIdx( nIdx ); + if (m_pPcdI) + m_pPcdI->SetIdx( nIdx ); } bool WW8PLCFx_PCD::SeekPos(WW8_CP nCpPos) { - return pPcdI && pPcdI->SeekPos( nCpPos ); + return m_pPcdI && m_pPcdI->SeekPos( nCpPos ); } WW8_CP WW8PLCFx_PCD::Where() { - return pPcdI ? pPcdI->Where() : WW8_CP_MAX; + return m_pPcdI ? m_pPcdI->Where() : WW8_CP_MAX; } tools::Long WW8PLCFx_PCD::GetNoSprms( WW8_CP& rStart, WW8_CP& rEnd, sal_Int32& rLen ) @@ -1179,19 +1175,19 @@ tools::Long WW8PLCFx_PCD::GetNoSprms( WW8_CP& rStart, WW8_CP& rEnd, sal_Int32& r void* pData; rLen = 0; - if ( !pPcdI || !pPcdI->Get(rStart, rEnd, pData) ) + if ( !m_pPcdI || !m_pPcdI->Get(rStart, rEnd, pData) ) { rStart = rEnd = WW8_CP_MAX; return -1; } - return pPcdI->GetIdx(); + return m_pPcdI->GetIdx(); } void WW8PLCFx_PCD::advance() { - OSL_ENSURE(pPcdI , "missing pPcdI"); - if (pPcdI) - pPcdI->advance(); + OSL_ENSURE(m_pPcdI , "missing pPcdI"); + if (m_pPcdI) + m_pPcdI->advance(); } WW8_FC WW8PLCFx_PCD::CurrentPieceStartCp2Fc( WW8_CP nCp ) @@ -1199,7 +1195,7 @@ WW8_FC WW8PLCFx_PCD::CurrentPieceStartCp2Fc( WW8_CP nCp ) WW8_CP nCpStart, nCpEnd; void* pData; - if ( !pPcdI->Get(nCpStart, nCpEnd, pData) ) + if ( !m_pPcdI->Get(nCpStart, nCpEnd, pData) ) { OSL_ENSURE( false, "CurrentPieceStartCp2Fc() with false Cp found (1)" ); return WW8_FC_MAX; @@ -1215,7 +1211,7 @@ WW8_FC WW8PLCFx_PCD::CurrentPieceStartCp2Fc( WW8_CP nCp ) bool bIsUnicode = false; WW8_FC nFC = SVBT32ToUInt32( static_cast<WW8_PCD*>(pData)->fc ); - if( !bVer67 ) + if( !m_bVer67 ) nFC = WW8PLCFx_PCD::TransformPieceAddress( nFC, bIsUnicode ); WW8_CP nDistance; @@ -1262,14 +1258,14 @@ WW8_CP WW8PLCFx_PCD::CurrentPieceStartFc2Cp( WW8_FC nStartPos ) { WW8_CP nCpStart, nCpEnd; void* pData; - if ( !pPcdI->Get( nCpStart, nCpEnd, pData ) ) + if ( !m_pPcdI->Get( nCpStart, nCpEnd, pData ) ) { OSL_ENSURE( false, "CurrentPieceStartFc2Cp() - error" ); return WW8_CP_MAX; } bool bIsUnicode = false; sal_Int32 nFcStart = SVBT32ToUInt32( static_cast<WW8_PCD*>(pData)->fc ); - if( !bVer67 ) + if( !m_bVer67 ) nFcStart = WW8PLCFx_PCD::TransformPieceAddress( nFcStart, bIsUnicode ); sal_Int32 nUnicodeFactor = bIsUnicode ? 2 : 1; @@ -2137,7 +2133,7 @@ sal_Int32 WW8ScannerBase::WW8ReadString( SvStream& rStrm, OUString& rStr, WW8PLCFspecial::WW8PLCFspecial(SvStream* pSt, sal_uInt32 nFilePos, sal_uInt32 nPLCF, sal_uInt32 nStruct) - : nIdx(0), nStru(nStruct) + : m_nIdx(0), m_nStru(nStruct) { const sal_uInt32 nValidMin=4; @@ -2150,23 +2146,23 @@ WW8PLCFspecial::WW8PLCFspecial(SvStream* pSt, sal_uInt32 nFilePos, nPLCF = bValid ? std::min(nRemainingSize, static_cast<std::size_t>(nPLCF)) : nValidMin; // Pointer to Pos- and Struct-array - pPLCF_PosArray.reset( new sal_Int32[ ( nPLCF + 3 ) / 4 ] ); - pPLCF_PosArray[0] = 0; + m_pPLCF_PosArray.reset( new sal_Int32[ ( nPLCF + 3 ) / 4 ] ); + m_pPLCF_PosArray[0] = 0; - nPLCF = bValid ? pSt->ReadBytes(pPLCF_PosArray.get(), nPLCF) : nValidMin; + nPLCF = bValid ? pSt->ReadBytes(m_pPLCF_PosArray.get(), nPLCF) : nValidMin; nPLCF = std::max(nPLCF, nValidMin); - nIMax = ( nPLCF - 4 ) / ( 4 + nStruct ); + m_nIMax = ( nPLCF - 4 ) / ( 4 + nStruct ); #ifdef OSL_BIGENDIAN - for( nIdx = 0; nIdx <= nIMax; nIdx++ ) - pPLCF_PosArray[nIdx] = OSL_SWAPDWORD( pPLCF_PosArray[nIdx] ); - nIdx = 0; + for( m_nIdx = 0; m_nIdx <= m_nIMax; m_nIdx++ ) + m_pPLCF_PosArray[m_nIdx] = OSL_SWAPDWORD( m_pPLCF_PosArray[m_nIdx] ); + m_nIdx = 0; #endif // OSL_BIGENDIAN if( nStruct ) // Pointer to content array - pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&pPLCF_PosArray[nIMax + 1]); + m_pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&m_pPLCF_PosArray[m_nIMax + 1]); else - pPLCF_Contents = nullptr; // no content + m_pPLCF_Contents = nullptr; // no content pSt->Seek(nOldPos); } @@ -2177,33 +2173,33 @@ WW8PLCFspecial::WW8PLCFspecial(SvStream* pSt, sal_uInt32 nFilePos, // the position nPos. bool WW8PLCFspecial::SeekPos(tools::Long nP) { - if( nP < pPLCF_PosArray[0] ) + if( nP < m_pPLCF_PosArray[0] ) { - nIdx = 0; + m_nIdx = 0; return false; // Not found: nP less than smallest entry } // Search from beginning? - if ((nIdx < 1) || (nP < pPLCF_PosArray[nIdx - 1])) - nIdx = 1; + if ((m_nIdx < 1) || (nP < m_pPLCF_PosArray[m_nIdx - 1])) + m_nIdx = 1; - tools::Long nI = nIdx; - tools::Long nEnd = nIMax; + tools::Long nI = m_nIdx; + tools::Long nEnd = m_nIMax; - for(int n = (1==nIdx ? 1 : 2); n; --n ) + for(int n = (1==m_nIdx ? 1 : 2); n; --n ) { for( ; nI <=nEnd; ++nI) { // search with an index that is incremented by 1 - if( nP < pPLCF_PosArray[nI] ) + if( nP < m_pPLCF_PosArray[nI] ) { // found position - nIdx = nI - 1; // nI - 1 is the correct index + m_nIdx = nI - 1; // nI - 1 is the correct index return true; // done } } nI = 1; - nEnd = nIdx-1; + nEnd = m_nIdx-1; } - nIdx = nIMax; // not found, greater than all entries + m_nIdx = m_nIMax; // not found, greater than all entries return false; } @@ -2212,49 +2208,49 @@ bool WW8PLCFspecial::SeekPos(tools::Long nP) // Is used for fields and bookmarks. bool WW8PLCFspecial::SeekPosExact(tools::Long nP) { - if( nP < pPLCF_PosArray[0] ) + if( nP < m_pPLCF_PosArray[0] ) { - nIdx = 0; + m_nIdx = 0; return false; // Not found: nP less than smallest entry } // Search from beginning? - if( nP <=pPLCF_PosArray[nIdx] ) - nIdx = 0; + if( nP <=m_pPLCF_PosArray[m_nIdx] ) + m_nIdx = 0; - tools::Long nI = nIdx ? nIdx-1 : 0; - tools::Long nEnd = nIMax; + tools::Long nI = m_nIdx ? m_nIdx-1 : 0; + tools::Long nEnd = m_nIMax; - for(int n = (0==nIdx ? 1 : 2); n; --n ) + for(int n = (0==m_nIdx ? 1 : 2); n; --n ) { for( ; nI < nEnd; ++nI) { - if( nP <=pPLCF_PosArray[nI] ) + if( nP <=m_pPLCF_PosArray[nI] ) { // found position - nIdx = nI; // nI is the correct index + m_nIdx = nI; // nI is the correct index return true; // done } } nI = 0; - nEnd = nIdx; + nEnd = m_nIdx; } - nIdx = nIMax; // Not found, greater than all entries + m_nIdx = m_nIMax; // Not found, greater than all entries return false; } bool WW8PLCFspecial::Get(WW8_CP& rPos, void*& rpValue) const { - return GetData( nIdx, rPos, rpValue ); + return GetData( m_nIdx, rPos, rpValue ); } bool WW8PLCFspecial::GetData(tools::Long nInIdx, WW8_CP& rPos, void*& rpValue) const { - if ( nInIdx >= nIMax ) + if ( nInIdx >= m_nIMax ) { rPos = WW8_CP_MAX; return false; } - rPos = pPLCF_PosArray[nInIdx]; - rpValue = pPLCF_Contents ? static_cast<void*>(&pPLCF_Contents[nInIdx * nStru]) : nullptr; + rPos = m_pPLCF_PosArray[nInIdx]; + rpValue = m_pPLCF_Contents ? static_cast<void*>(&m_pPLCF_Contents[nInIdx * m_nStru]) : nullptr; return true; } @@ -2262,7 +2258,7 @@ bool WW8PLCFspecial::GetData(tools::Long nInIdx, WW8_CP& rPos, void*& rpValue) c // Ctor for *others* than Fkps // With nStartPos < 0, the first element of PLCFs will be taken WW8PLCF::WW8PLCF(SvStream& rSt, WW8_FC nFilePos, sal_Int32 nPLCF, int nStruct, - WW8_CP nStartPos) : nIdx(0), nStru(nStruct) + WW8_CP nStartPos) : m_nIdx(0), m_nStru(nStruct) { if (nPLCF < 0) { @@ -2270,7 +2266,7 @@ WW8PLCF::WW8PLCF(SvStream& rSt, WW8_FC nFilePos, sal_Int32 nPLCF, int nStruct, nPLCF = 0; } else - nIMax = (nPLCF - 4) / (4 + nStruct); + m_nIMax = (nPLCF - 4) / (4 + nStruct); ReadPLCF(rSt, nFilePos, nPLCF); @@ -2284,18 +2280,18 @@ WW8PLCF::WW8PLCF(SvStream& rSt, WW8_FC nFilePos, sal_Int32 nPLCF, int nStruct, // lack of resources and for WordPad (W95). // With nStartPos < 0, the first element of the PLCFs is taken. WW8PLCF::WW8PLCF(SvStream& rSt, WW8_FC nFilePos, sal_Int32 nPLCF, int nStruct, - WW8_CP nStartPos, sal_Int32 nPN, sal_Int32 ncpN): nIdx(0), - nStru(nStruct) + WW8_CP nStartPos, sal_Int32 nPN, sal_Int32 ncpN): m_nIdx(0), + m_nStru(nStruct) { if (nPLCF < 0) { SAL_WARN("sw.ww8", "broken WW8PLCF, ignoring"); - nIMax = SAL_MAX_INT32; + m_nIMax = SAL_MAX_INT32; } else - nIMax = (nPLCF - 4) / (4 + nStruct); + m_nIMax = (nPLCF - 4) / (4 + nStruct); - if( nIMax >= ncpN ) + if( m_nIMax >= ncpN ) ReadPLCF(rSt, nFilePos, nPLCF); else GeneratePLCF(rSt, nPN, ncpN); @@ -2313,19 +2309,26 @@ void WW8PLCF::ReadPLCF(SvStream& rSt, WW8_FC nFilePos, sal_uInt32 nPLCF) if (bValid) { // Pointer to Pos-array - pPLCF_PosArray.reset( new WW8_CP[ ( nPLCF + 3 ) / 4 ] ); - bValid = checkRead(rSt, pPLCF_PosArray.get(), nPLCF); + const size_t nEntries = (nPLCF + 3) / 4; + m_pPLCF_PosArray.reset(new WW8_CP[nEntries]); + bValid = checkRead(rSt, m_pPLCF_PosArray.get(), nPLCF); + size_t nBytesAllocated = nEntries * sizeof(WW8_CP); + if (bValid && nPLCF != nBytesAllocated) + { + sal_uInt8* pStartBlock = reinterpret_cast<sal_uInt8*>(m_pPLCF_PosArray.get()); + memset(pStartBlock + nPLCF, 0, nBytesAllocated - nPLCF); + } } if (bValid) { #ifdef OSL_BIGENDIAN - for( nIdx = 0; nIdx <= nIMax; nIdx++ ) - pPLCF_PosArray[nIdx] = OSL_SWAPDWORD( pPLCF_PosArray[nIdx] ); - nIdx = 0; + for( m_nIdx = 0; m_nIdx <= m_nIMax; m_nIdx++ ) + m_pPLCF_PosArray[m_nIdx] = OSL_SWAPDWORD( m_pPLCF_PosArray[m_nIdx] ); + m_nIdx = 0; #endif // OSL_BIGENDIAN // Pointer to content array - pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&pPLCF_PosArray[nIMax + 1]); + m_pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&m_pPLCF_PosArray[m_nIMax + 1]); TruncToSortedRange(); } @@ -2340,10 +2343,10 @@ void WW8PLCF::ReadPLCF(SvStream& rSt, WW8_FC nFilePos, sal_uInt32 nPLCF) void WW8PLCF::MakeFailedPLCF() { - nIMax = 0; - pPLCF_PosArray.reset( new WW8_CP[2] ); - pPLCF_PosArray[0] = pPLCF_PosArray[1] = WW8_CP_MAX; - pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&pPLCF_PosArray[nIMax + 1]); + m_nIMax = 0; + m_pPLCF_PosArray.reset( new WW8_CP[2] ); + m_pPLCF_PosArray[0] = m_pPLCF_PosArray[1] = WW8_CP_MAX; + m_pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&m_pPLCF_PosArray[m_nIMax + 1]); } namespace @@ -2367,22 +2370,22 @@ namespace void WW8PLCFpcd::TruncToSortedRange() { - nIMax = ::TruncToSortedRange(pPLCF_PosArray.get(), nIMax); + m_nIMax = ::TruncToSortedRange(m_pPLCF_PosArray.get(), m_nIMax); } void WW8PLCF::TruncToSortedRange() { - nIMax = ::TruncToSortedRange(pPLCF_PosArray.get(), nIMax); + m_nIMax = ::TruncToSortedRange(m_pPLCF_PosArray.get(), m_nIMax); } void WW8PLCF::GeneratePLCF(SvStream& rSt, sal_Int32 nPN, sal_Int32 ncpN) { - OSL_ENSURE( nIMax < ncpN, "Pcl.Fkp: Why is PLCF too big?" ); + OSL_ENSURE( m_nIMax < ncpN, "Pcl.Fkp: Why is PLCF too big?" ); bool failure = false; - nIMax = ncpN; + m_nIMax = ncpN; - if ((nIMax < 1) || (nIMax > (WW8_CP_MAX - 4) / (4 + nStru)) || nPN < 0) + if ((m_nIMax < 1) || (m_nIMax > (WW8_CP_MAX - 4) / (4 + m_nStru)) || nPN < 0) failure = true; if (!failure) @@ -2394,9 +2397,9 @@ void WW8PLCF::GeneratePLCF(SvStream& rSt, sal_Int32 nPN, sal_Int32 ncpN) if (!failure) { - size_t nSiz = (4 + nStru) * nIMax + 4; + size_t nSiz = (4 + m_nStru) * m_nIMax + 4; size_t nElems = ( nSiz + 3 ) / 4; - pPLCF_PosArray.reset( new WW8_CP[ nElems ] ); // Pointer to Pos-array + m_pPLCF_PosArray.reset( new WW8_CP[ nElems ] ); // Pointer to Pos-array for (sal_Int32 i = 0; i < ncpN && !failure; ++i) { @@ -2408,7 +2411,7 @@ void WW8PLCF::GeneratePLCF(SvStream& rSt, sal_Int32 nPN, sal_Int32 ncpN) WW8_CP nFc(0); rSt.ReadInt32( nFc ); - pPLCF_PosArray[i] = nFc; + m_pPLCF_PosArray[i] = nFc; failure = bool(rSt.GetError()); } @@ -2420,7 +2423,7 @@ void WW8PLCF::GeneratePLCF(SvStream& rSt, sal_Int32 nPN, sal_Int32 ncpN) { failure = true; - std::size_t nLastFkpPos = nPN + nIMax - 1; + std::size_t nLastFkpPos = nPN + m_nIMax - 1; nLastFkpPos = nLastFkpPos << 9; // number of FC entries of last Fkp if (!checkSeek(rSt, nLastFkpPos + 511)) @@ -2434,7 +2437,7 @@ void WW8PLCF::GeneratePLCF(SvStream& rSt, sal_Int32 nPN, sal_Int32 ncpN) WW8_CP nFc(0); rSt.ReadInt32( nFc ); - pPLCF_PosArray[nIMax] = nFc; // end of the last Fkp + m_pPLCF_PosArray[m_nIMax] = nFc; // end of the last Fkp failure = bool(rSt.GetError()); } while(false); @@ -2443,13 +2446,13 @@ void WW8PLCF::GeneratePLCF(SvStream& rSt, sal_Int32 nPN, sal_Int32 ncpN) if (!failure) { // Pointer to content array - pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&pPLCF_PosArray[nIMax + 1]); - sal_uInt8* p = pPLCF_Contents; + m_pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&m_pPLCF_PosArray[m_nIMax + 1]); + sal_uInt8* p = m_pPLCF_Contents; for (sal_Int32 i = 0; i < ncpN; ++i) // construct PNs { - ShortToSVBT16(static_cast<sal_uInt16>(nPN + i), p); - p += nStru; + ShortToSVBT16(o3tl::narrowing<sal_uInt16>(nPN + i), p); + p += m_nStru; } } @@ -2463,62 +2466,62 @@ bool WW8PLCF::SeekPos(WW8_CP nPos) { WW8_CP nP = nPos; - if( nP < pPLCF_PosArray[0] ) + if( nP < m_pPLCF_PosArray[0] ) { - nIdx = 0; + m_nIdx = 0; // not found: nPos less than smallest entry return false; } // Search from beginning? - if ((nIdx < 1) || (nP < pPLCF_PosArray[nIdx - 1])) - nIdx = 1; + if ((m_nIdx < 1) || (nP < m_pPLCF_PosArray[m_nIdx - 1])) + m_nIdx = 1; - sal_Int32 nI = nIdx; - sal_Int32 nEnd = nIMax; + sal_Int32 nI = m_nIdx; + sal_Int32 nEnd = m_nIMax; - for(int n = (1==nIdx ? 1 : 2); n; --n ) + for(int n = (1==m_nIdx ? 1 : 2); n; --n ) { for( ; nI <=nEnd; ++nI) // search with an index that is incremented by 1 { - if( nP < pPLCF_PosArray[nI] ) // found position + if( nP < m_pPLCF_PosArray[nI] ) // found position { - nIdx = nI - 1; // nI - 1 is the correct index + m_nIdx = nI - 1; // nI - 1 is the correct index return true; // done } } nI = 1; - nEnd = nIdx-1; + nEnd = m_nIdx-1; } - nIdx = nIMax; // not found, greater than all entries + m_nIdx = m_nIMax; // not found, greater than all entries return false; } bool WW8PLCF::Get(WW8_CP& rStart, WW8_CP& rEnd, void*& rpValue) const { - if ( nIdx >= nIMax ) + if ( m_nIdx >= m_nIMax ) { rStart = rEnd = WW8_CP_MAX; return false; } - rStart = pPLCF_PosArray[ nIdx ]; - rEnd = pPLCF_PosArray[ nIdx + 1 ]; - rpValue = static_cast<void*>(&pPLCF_Contents[nIdx * nStru]); + rStart = m_pPLCF_PosArray[ m_nIdx ]; + rEnd = m_pPLCF_PosArray[ m_nIdx + 1 ]; + rpValue = static_cast<void*>(&m_pPLCF_Contents[m_nIdx * m_nStru]); return true; } WW8_CP WW8PLCF::Where() const { - if ( nIdx >= nIMax ) + if ( m_nIdx >= m_nIMax ) return WW8_CP_MAX; - return pPLCF_PosArray[nIdx]; + return m_pPLCF_PosArray[m_nIdx]; } WW8PLCFpcd::WW8PLCFpcd(SvStream* pSt, sal_uInt32 nFilePos, sal_uInt32 nPLCF, sal_uInt32 nStruct) - : nStru( nStruct ) + : m_nStru( nStruct ) { const sal_uInt32 nValidMin=4; @@ -2530,20 +2533,20 @@ WW8PLCFpcd::WW8PLCFpcd(SvStream* pSt, sal_uInt32 nFilePos, bValid = false; nPLCF = bValid ? std::min(nRemainingSize, static_cast<std::size_t>(nPLCF)) : nValidMin; - pPLCF_PosArray.reset( new WW8_CP[ ( nPLCF + 3 ) / 4 ] ); // Pointer to Pos-array - pPLCF_PosArray[0] = 0; + m_pPLCF_PosArray.reset( new WW8_CP[ ( nPLCF + 3 ) / 4 ] ); // Pointer to Pos-array + m_pPLCF_PosArray[0] = 0; - nPLCF = bValid ? pSt->ReadBytes(pPLCF_PosArray.get(), nPLCF) : nValidMin; + nPLCF = bValid ? pSt->ReadBytes(m_pPLCF_PosArray.get(), nPLCF) : nValidMin; nPLCF = std::max(nPLCF, nValidMin); - nIMax = ( nPLCF - 4 ) / ( 4 + nStruct ); + m_nIMax = ( nPLCF - 4 ) / ( 4 + nStruct ); #ifdef OSL_BIGENDIAN - for( tools::Long nI = 0; nI <= nIMax; nI++ ) - pPLCF_PosArray[nI] = OSL_SWAPDWORD( pPLCF_PosArray[nI] ); + for( tools::Long nI = 0; nI <= m_nIMax; nI++ ) + m_pPLCF_PosArray[nI] = OSL_SWAPDWORD( m_pPLCF_PosArray[nI] ); #endif // OSL_BIGENDIAN // Pointer to content array - pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&pPLCF_PosArray[nIMax + 1]); + m_pPLCF_Contents = reinterpret_cast<sal_uInt8*>(&m_pPLCF_PosArray[m_nIMax + 1]); TruncToSortedRange(); pSt->Seek( nOldPos ); @@ -2551,7 +2554,7 @@ WW8PLCFpcd::WW8PLCFpcd(SvStream* pSt, sal_uInt32 nFilePos, // If nStartPos < 0, the first element of PLCFs will be taken WW8PLCFpcd_Iter::WW8PLCFpcd_Iter( WW8PLCFpcd& rPLCFpcd, tools::Long nStartPos ) - :rPLCF( rPLCFpcd ), nIdx( 0 ) + :m_rPLCF( rPLCFpcd ), m_nIdx( 0 ) { if( nStartPos >= 0 ) SeekPos( nStartPos ); @@ -2561,54 +2564,54 @@ bool WW8PLCFpcd_Iter::SeekPos(tools::Long nPos) { tools::Long nP = nPos; - if( nP < rPLCF.pPLCF_PosArray[0] ) + if( nP < m_rPLCF.m_pPLCF_PosArray[0] ) { - nIdx = 0; + m_nIdx = 0; return false; // not found: nPos less than smallest entry } // Search from beginning? - if ((nIdx < 1) || (nP < rPLCF.pPLCF_PosArray[nIdx - 1])) - nIdx = 1; + if ((m_nIdx < 1) || (nP < m_rPLCF.m_pPLCF_PosArray[m_nIdx - 1])) + m_nIdx = 1; - tools::Long nI = nIdx; - tools::Long nEnd = rPLCF.nIMax; + tools::Long nI = m_nIdx; + tools::Long nEnd = m_rPLCF.m_nIMax; - for(int n = (1==nIdx ? 1 : 2); n; --n ) + for(int n = (1==m_nIdx ? 1 : 2); n; --n ) { for( ; nI <=nEnd; ++nI) { // search with an index that is incremented by 1 - if( nP < rPLCF.pPLCF_PosArray[nI] ) + if( nP < m_rPLCF.m_pPLCF_PosArray[nI] ) { // found position - nIdx = nI - 1; // nI - 1 is the correct index + m_nIdx = nI - 1; // nI - 1 is the correct index return true; // done } } nI = 1; - nEnd = nIdx-1; + nEnd = m_nIdx-1; } - nIdx = rPLCF.nIMax; // not found, greater than all entries + m_nIdx = m_rPLCF.m_nIMax; // not found, greater than all entries return false; } bool WW8PLCFpcd_Iter::Get(WW8_CP& rStart, WW8_CP& rEnd, void*& rpValue) const { - if( nIdx >= rPLCF.nIMax ) + if( m_nIdx >= m_rPLCF.m_nIMax ) { rStart = rEnd = WW8_CP_MAX; return false; } - rStart = rPLCF.pPLCF_PosArray[nIdx]; - rEnd = rPLCF.pPLCF_PosArray[nIdx + 1]; - rpValue = static_cast<void*>(&rPLCF.pPLCF_Contents[nIdx * rPLCF.nStru]); + rStart = m_rPLCF.m_pPLCF_PosArray[m_nIdx]; + rEnd = m_rPLCF.m_pPLCF_PosArray[m_nIdx + 1]; + rpValue = static_cast<void*>(&m_rPLCF.m_pPLCF_Contents[m_nIdx * m_rPLCF.m_nStru]); return true; } sal_Int32 WW8PLCFpcd_Iter::Where() const { - if ( nIdx >= rPLCF.nIMax ) + if ( m_nIdx >= m_rPLCF.m_nIMax ) return SAL_MAX_INT32; - return rPLCF.pPLCF_PosArray[nIdx]; + return m_rPLCF.m_pPLCF_PosArray[m_nIdx]; } bool WW8PLCFx_Fc_FKP::WW8Fkp::Entry::operator< @@ -2641,7 +2644,7 @@ void WW8PLCFx_Fc_FKP::WW8Fkp::FillEntry(WW8PLCFx_Fc_FKP::WW8Fkp::Entry &rEntry, } const sal_uInt16 nAvailableData = sizeof(maRawData)-nDataOffset; - OSL_ENSURE(nLen <= nAvailableData, "srpm sequence len is out of range, clipping"); + OSL_ENSURE(nLen <= nAvailableData, "sprm sequence len is out of range, clipping"); rEntry.mnLen = std::min(nLen, nAvailableData); rEntry.mpData = maRawData + nDataOffset; } @@ -2649,7 +2652,7 @@ void WW8PLCFx_Fc_FKP::WW8Fkp::FillEntry(WW8PLCFx_Fc_FKP::WW8Fkp::Entry &rEntry, WW8PLCFx_Fc_FKP::WW8Fkp::WW8Fkp(const WW8Fib& rFib, SvStream* pSt, SvStream* pDataSt, tools::Long _nFilePos, tools::Long nItemSiz, ePLCFT ePl, WW8_FC nStartFc) - : nItemSize(nItemSiz), nFilePos(_nFilePos), mnIdx(0), ePLCF(ePl) + : m_nItemSize(nItemSiz), m_nFilePos(_nFilePos), mnIdx(0), m_ePLCF(ePl) , mnMustRemainCached(0), maSprmParser(rFib) { memset(maRawData, 0, 512); @@ -2658,7 +2661,7 @@ WW8PLCFx_Fc_FKP::WW8Fkp::WW8Fkp(const WW8Fib& rFib, SvStream* pSt, sal_uInt64 const nOldPos = pSt->Tell(); - bool bCouldSeek = checkSeek(*pSt, nFilePos); + bool bCouldSeek = checkSeek(*pSt, m_nFilePos); bool bCouldRead = bCouldSeek && checkRead(*pSt, maRawData, 512); mnIMax = bCouldRead ? maRawData[511] : 0; @@ -2669,7 +2672,7 @@ WW8PLCFx_Fc_FKP::WW8Fkp::WW8Fkp(const WW8Fib& rFib, SvStream* pSt, for (mnIdx = 0; mnIdx < mnIMax; ++mnIdx) { - const size_t nRawDataOffset = nRawDataStart + mnIdx * nItemSize; + const size_t nRawDataOffset = nRawDataStart + mnIdx * m_nItemSize; //clip to available data, corrupt fkp if (nRawDataOffset >= 511) @@ -2685,7 +2688,7 @@ WW8PLCFx_Fc_FKP::WW8Fkp::WW8Fkp(const WW8Fib& rFib, SvStream* pSt, if (nOfs) { - switch (ePLCF) + switch (m_ePLCF) { case CHP: { @@ -2698,7 +2701,7 @@ WW8PLCFx_Fc_FKP::WW8Fkp::WW8Fkp(const WW8Fib& rFib, SvStream* pSt, if (aEntry.mnLen && eVersion <= ww::eWW2) { - Word2CHPX aChpx = ReadWord2Chpx(*pSt, nFilePos + nOfs + 1, static_cast< sal_uInt8 >(aEntry.mnLen)); + Word2CHPX aChpx = ReadWord2Chpx(*pSt, m_nFilePos + nOfs + 1, static_cast< sal_uInt8 >(aEntry.mnLen)); std::vector<sal_uInt8> aSprms = ChpxToSprms(aChpx); aEntry.mnLen = static_cast< sal_uInt16 >(aSprms.size()); if (aEntry.mnLen) @@ -2784,7 +2787,7 @@ WW8PLCFx_Fc_FKP::WW8Fkp::WW8Fkp(const WW8Fib& rFib, SvStream* pSt, pStartData = nullptr; if ((IsReplaceAllSprm(nSpId) || bExpand) && pStartData) { - sal_uInt32 nCurr = pDataSt->Tell(); + sal_uInt64 nCurr = pDataSt->Tell(); sal_uInt32 nPos = SVBT32ToUInt32(pStartData); sal_uInt16 nLen(0); @@ -2826,19 +2829,6 @@ WW8PLCFx_Fc_FKP::WW8Fkp::WW8Fkp(const WW8Fib& rFib, SvStream* pSt, } maEntries.push_back(aEntry); - -#ifdef DEBUGSPRMREADER - { - sal_Int32 nLen; - sal_uInt8* pSprms = GetLenAndIStdAndSprms( nLen ); - WW8SprmIter aIter(pSprms, nLen, maSprmParser); - while (aIter.GetSprms()) - { - fprintf(stderr, "id is %x\n", aIter.GetCurrentId()); - aIter.advance(); - } - } -#endif } //one more FC than grrpl entries @@ -3089,32 +3079,32 @@ bool WW8PLCFx_Fc_FKP::NewFkp() return false; } - if (!pPLCF->Get( nPLCFStart, nPLCFEnd, pPage )) + if (!m_pPLCF->Get( nPLCFStart, nPLCFEnd, pPage )) { - pFkp = nullptr; + m_pFkp = nullptr; return false; // PLCF completely processed } - pPLCF->advance(); + m_pPLCF->advance(); tools::Long nPo = SVBT16ToUInt16( static_cast<sal_uInt8 *>(pPage) ); nPo <<= 9; // shift as LONG - tools::Long nCurrentFkpFilePos = pFkp ? pFkp->GetFilePos() : -1; + tools::Long nCurrentFkpFilePos = m_pFkp ? m_pFkp->GetFilePos() : -1; if (nCurrentFkpFilePos == nPo) - pFkp->Reset(GetStartFc()); + m_pFkp->Reset(GetStartFc()); else { auto aIter = std::find_if(maFkpCache.begin(), maFkpCache.end(), SamePos(nPo)); if (aIter != maFkpCache.end()) { - pFkp = aIter->get(); - pFkp->Reset(GetStartFc()); + m_pFkp = aIter->get(); + m_pFkp->Reset(GetStartFc()); } else { - pFkp = new WW8Fkp(GetFIB(), pFKPStrm, pDataStrm, nPo, - pFkpSizeTab[ ePLCF ], ePLCF, GetStartFc()); - maFkpCache.push_back(std::unique_ptr<WW8Fkp>(pFkp)); + m_pFkp = new WW8Fkp(GetFIB(), m_pFKPStrm, m_pDataStrm, nPo, + pFkpSizeTab[ m_ePLCF ], m_ePLCF, GetStartFc()); + maFkpCache.push_back(std::unique_ptr<WW8Fkp>(m_pFkp)); if (maFkpCache.size() > eMaxCache) { @@ -3133,19 +3123,19 @@ bool WW8PLCFx_Fc_FKP::NewFkp() WW8PLCFx_Fc_FKP::WW8PLCFx_Fc_FKP(SvStream* pSt, SvStream* pTableSt, SvStream* pDataSt, const WW8Fib& rFib, ePLCFT ePl, WW8_FC nStartFcL) - : WW8PLCFx(rFib, true), pFKPStrm(pSt), pDataStrm(pDataSt) - , pFkp(nullptr), ePLCF(ePl) + : WW8PLCFx(rFib, true), m_pFKPStrm(pSt), m_pDataStrm(pDataSt) + , m_pFkp(nullptr), m_ePLCF(ePl) { SetStartFc(nStartFcL); tools::Long nLenStruct = (8 > rFib.m_nVersion) ? 2 : 4; if (ePl == CHP) { - pPLCF.reset(new WW8PLCF(*pTableSt, rFib.m_fcPlcfbteChpx, rFib.m_lcbPlcfbteChpx, + m_pPLCF.reset(new WW8PLCF(*pTableSt, rFib.m_fcPlcfbteChpx, rFib.m_lcbPlcfbteChpx, nLenStruct, GetStartFc(), rFib.m_pnChpFirst, rFib.m_cpnBteChp)); } else { - pPLCF.reset(new WW8PLCF(*pTableSt, rFib.m_fcPlcfbtePapx, rFib.m_lcbPlcfbtePapx, + m_pPLCF.reset(new WW8PLCF(*pTableSt, rFib.m_fcPlcfbtePapx, rFib.m_lcbPlcfbtePapx, nLenStruct, GetStartFc(), rFib.m_pnPapFirst, rFib.m_cpnBtePap)); } } @@ -3153,15 +3143,15 @@ WW8PLCFx_Fc_FKP::WW8PLCFx_Fc_FKP(SvStream* pSt, SvStream* pTableSt, WW8PLCFx_Fc_FKP::~WW8PLCFx_Fc_FKP() { maFkpCache.clear(); - pPLCF.reset(); - pPCDAttrs.reset(); + m_pPLCF.reset(); + m_pPCDAttrs.reset(); } sal_uInt32 WW8PLCFx_Fc_FKP::GetIdx() const { - sal_uInt32 u = pPLCF->GetIdx() << 8; - if (pFkp) - u |= pFkp->GetIdx(); + sal_uInt32 u = m_pPLCF->GetIdx() << 8; + if (m_pFkp) + u |= m_pFkp->GetIdx(); return u; } @@ -3169,17 +3159,17 @@ void WW8PLCFx_Fc_FKP::SetIdx(sal_uInt32 nIdx) { if( !( nIdx & 0xffffff00L ) ) { - pPLCF->SetIdx( nIdx >> 8 ); - pFkp = nullptr; + m_pPLCF->SetIdx( nIdx >> 8 ); + m_pFkp = nullptr; } else { // there was a Fkp // Set PLCF one position back to retrieve the address of the Fkp - pPLCF->SetIdx( ( nIdx >> 8 ) - 1 ); + m_pPLCF->SetIdx( ( nIdx >> 8 ) - 1 ); if (NewFkp()) // read Fkp again { sal_uInt8 nFkpIdx = static_cast<sal_uInt8>(nIdx & 0xff); - pFkp->SetIdx(nFkpIdx); // set Fkp-Pos again + m_pFkp->SetIdx(nFkpIdx); // set Fkp-Pos again } } } @@ -3190,32 +3180,32 @@ bool WW8PLCFx_Fc_FKP::SeekPos(WW8_FC nFcPos) SetStartFc( nFcPos ); // find StartPos for next pPLCF->Get() - bool bRet = pPLCF->SeekPos(nFcPos); + bool bRet = m_pPLCF->SeekPos(nFcPos); // make FKP invalid? WW8_CP nPLCFStart, nPLCFEnd; void* pPage; - if( pFkp && pPLCF->Get( nPLCFStart, nPLCFEnd, pPage ) ) + if( m_pFkp && m_pPLCF->Get( nPLCFStart, nPLCFEnd, pPage ) ) { tools::Long nPo = SVBT16ToUInt16( static_cast<sal_uInt8 *>(pPage) ); nPo <<= 9; // shift as LONG - if (nPo != pFkp->GetFilePos()) - pFkp = nullptr; + if (nPo != m_pFkp->GetFilePos()) + m_pFkp = nullptr; else - pFkp->SeekPos( nFcPos ); + m_pFkp->SeekPos( nFcPos ); } return bRet; } WW8_FC WW8PLCFx_Fc_FKP::Where() { - if( !pFkp && !NewFkp() ) + if( !m_pFkp && !NewFkp() ) return WW8_FC_MAX; - WW8_FC nP = pFkp ? pFkp->Where() : WW8_FC_MAX; + WW8_FC nP = m_pFkp ? m_pFkp->Where() : WW8_FC_MAX; if( nP != WW8_FC_MAX ) return nP; - pFkp = nullptr; // FKP finished -> get new + m_pFkp = nullptr; // FKP finished -> get new return Where(); // easiest way: do it recursively } @@ -3224,13 +3214,13 @@ sal_uInt8* WW8PLCFx_Fc_FKP::GetSprmsAndPos(WW8_FC& rStart, WW8_FC& rEnd, sal_Int rLen = 0; // Default rStart = rEnd = WW8_FC_MAX; - if( !pFkp ) // Fkp not there ? + if( !m_pFkp ) // Fkp not there ? { if( !NewFkp() ) return nullptr; } - sal_uInt8* pPos = pFkp ? pFkp->Get( rStart, rEnd, rLen ) : nullptr; + sal_uInt8* pPos = m_pFkp ? m_pFkp->Get( rStart, rEnd, rLen ) : nullptr; if( rStart == WW8_FC_MAX ) //Not found return nullptr; return pPos; @@ -3238,42 +3228,42 @@ sal_uInt8* WW8PLCFx_Fc_FKP::GetSprmsAndPos(WW8_FC& rStart, WW8_FC& rEnd, sal_Int void WW8PLCFx_Fc_FKP::advance() { - if( !pFkp && !NewFkp() ) + if( !m_pFkp && !NewFkp() ) return; - if (!pFkp) + if (!m_pFkp) return; - pFkp->advance(); - if( pFkp->Where() == WW8_FC_MAX ) + m_pFkp->advance(); + if( m_pFkp->Where() == WW8_FC_MAX ) (void)NewFkp(); } sal_uInt16 WW8PLCFx_Fc_FKP::GetIstd() const { - return pFkp ? pFkp->GetIstd() : 0xFFFF; + return m_pFkp ? m_pFkp->GetIstd() : 0xFFFF; } void WW8PLCFx_Fc_FKP::GetPCDSprms( WW8PLCFxDesc& rDesc ) { rDesc.pMemPos = nullptr; rDesc.nSprmsLen = 0; - if( pPCDAttrs ) + if( m_pPCDAttrs ) { - if( !pFkp ) + if( !m_pFkp ) { OSL_FAIL("+Problem: GetPCDSprms: NewFkp necessary (not possible!)" ); if( !NewFkp() ) return; } - pPCDAttrs->GetSprms(&rDesc); + m_pPCDAttrs->GetSprms(&rDesc); } } SprmResult WW8PLCFx_Fc_FKP::HasSprm(sal_uInt16 nId, bool bFindFirst) { // const would be nicer, but for that, NewFkp() would need to be replaced or eliminated - if( !pFkp ) + if( !m_pFkp ) { OSL_FAIL( "+Motz: HasSprm: NewFkp needed ( no const possible )" ); // happens in BugDoc 31722 @@ -3281,10 +3271,10 @@ SprmResult WW8PLCFx_Fc_FKP::HasSprm(sal_uInt16 nId, bool bFindFirst) return SprmResult(); } - if (!pFkp) + if (!m_pFkp) return SprmResult(); - SprmResult aRes = pFkp->HasSprm(nId, bFindFirst); + SprmResult aRes = m_pFkp->HasSprm(nId, bFindFirst); if (!aRes.pSprm) { @@ -3294,7 +3284,7 @@ SprmResult WW8PLCFx_Fc_FKP::HasSprm(sal_uInt16 nId, bool bFindFirst) if (aDesc.pMemPos) { WW8SprmIter aIter(aDesc.pMemPos, aDesc.nSprmsLen, - pFkp->GetSprmParser()); + m_pFkp->GetSprmParser()); aRes = aIter.FindSprm(nId, bFindFirst); } } @@ -3305,7 +3295,7 @@ SprmResult WW8PLCFx_Fc_FKP::HasSprm(sal_uInt16 nId, bool bFindFirst) void WW8PLCFx_Fc_FKP::HasSprm(sal_uInt16 nId, std::vector<SprmResult> &rResult) { // const would be nicer, but for that, NewFkp() would need to be replaced or eliminated - if (!pFkp) + if (!m_pFkp) { OSL_FAIL( "+Motz: HasSprm: NewFkp needed ( no const possible )" ); // happens in BugDoc 31722 @@ -3313,10 +3303,10 @@ void WW8PLCFx_Fc_FKP::HasSprm(sal_uInt16 nId, std::vector<SprmResult> &rResult) return; } - if (!pFkp) + if (!m_pFkp) return; - pFkp->HasSprm(nId, rResult); + m_pFkp->HasSprm(nId, rResult); WW8PLCFxDesc aDesc; GetPCDSprms( aDesc ); @@ -3324,7 +3314,7 @@ void WW8PLCFx_Fc_FKP::HasSprm(sal_uInt16 nId, std::vector<SprmResult> &rResult) if (!aDesc.pMemPos) return; - const wwSprmParser &rSprmParser = pFkp->GetSprmParser(); + const wwSprmParser &rSprmParser = m_pFkp->GetSprmParser(); WW8SprmIter aIter(aDesc.pMemPos, aDesc.nSprmsLen, rSprmParser); while(aIter.GetSprms()) { @@ -3341,14 +3331,14 @@ void WW8PLCFx_Fc_FKP::HasSprm(sal_uInt16 nId, std::vector<SprmResult> &rResult) WW8PLCFx_Cp_FKP::WW8PLCFx_Cp_FKP( SvStream* pSt, SvStream* pTableSt, SvStream* pDataSt, const WW8ScannerBase& rBase, ePLCFT ePl ) : WW8PLCFx_Fc_FKP(pSt, pTableSt, pDataSt, *rBase.m_pWw8Fib, ePl, - rBase.WW8Cp2Fc(0)), rSBase(rBase), nAttrStart(-1), nAttrEnd(-1), - bLineEnd(false), - bComplex( (7 < rBase.m_pWw8Fib->m_nVersion) || rBase.m_pWw8Fib->m_fComplex ) + rBase.WW8Cp2Fc(0)), m_rSBase(rBase), m_nAttrStart(-1), m_nAttrEnd(-1), + m_bLineEnd(false), + m_bComplex( (7 < rBase.m_pWw8Fib->m_nVersion) || rBase.m_pWw8Fib->m_fComplex ) { ResetAttrStartEnd(); - if (rSBase.m_pPiecePLCF) - pPcd.reset( new WW8PLCFx_PCD(GetFIB(), rBase.m_pPiecePLCF.get(), 0, IsSevenMinus(GetFIBVersion())) ); + if (m_rSBase.m_pPiecePLCF) + m_pPcd.reset( new WW8PLCFx_PCD(GetFIB(), rBase.m_pPiecePLCF.get(), 0, IsSevenMinus(GetFIBVersion())) ); /* Make a copy of the piece attributes for so that the calls to HasSprm on a @@ -3356,13 +3346,13 @@ WW8PLCFx_Cp_FKP::WW8PLCFx_Cp_FKP( SvStream* pSt, SvStream* pTableSt, despite the fact that such attributes can only be found through a cp based mechanism. */ - if (pPcd) + if (m_pPcd) { - pPCDAttrs.reset( rSBase.m_pPLCFx_PCDAttrs ? new WW8PLCFx_PCDAttrs( - *rSBase.m_pWw8Fib, pPcd.get(), &rSBase) : nullptr); + m_pPCDAttrs.reset( m_rSBase.m_pPLCFx_PCDAttrs ? new WW8PLCFx_PCDAttrs( + *m_rSBase.m_pWw8Fib, m_pPcd.get(), &m_rSBase) : nullptr); } - pPieceIter = rSBase.m_pPieceIter.get(); + m_pPieceIter = m_rSBase.m_pPieceIter.get(); } WW8PLCFx_Cp_FKP::~WW8PLCFx_Cp_FKP() @@ -3371,36 +3361,36 @@ WW8PLCFx_Cp_FKP::~WW8PLCFx_Cp_FKP() void WW8PLCFx_Cp_FKP::ResetAttrStartEnd() { - nAttrStart = -1; - nAttrEnd = -1; - bLineEnd = false; + m_nAttrStart = -1; + m_nAttrEnd = -1; + m_bLineEnd = false; } sal_uInt32 WW8PLCFx_Cp_FKP::GetPCDIdx() const { - return pPcd ? pPcd->GetIdx() : 0; + return m_pPcd ? m_pPcd->GetIdx() : 0; } bool WW8PLCFx_Cp_FKP::SeekPos(WW8_CP nCpPos) { - if( pPcd ) // Complex + if( m_pPcd ) // Complex { - if( !pPcd->SeekPos( nCpPos ) ) // set piece + if( !m_pPcd->SeekPos( nCpPos ) ) // set piece return false; - if (pPCDAttrs && !pPCDAttrs->GetIter()->SeekPos(nCpPos)) + if (m_pPCDAttrs && !m_pPCDAttrs->GetIter()->SeekPos(nCpPos)) return false; - return WW8PLCFx_Fc_FKP::SeekPos(pPcd->CurrentPieceStartCp2Fc(nCpPos)); + return WW8PLCFx_Fc_FKP::SeekPos(m_pPcd->CurrentPieceStartCp2Fc(nCpPos)); } // NO piece table !!! - return WW8PLCFx_Fc_FKP::SeekPos( rSBase.WW8Cp2Fc(nCpPos) ); + return WW8PLCFx_Fc_FKP::SeekPos( m_rSBase.WW8Cp2Fc(nCpPos) ); } WW8_CP WW8PLCFx_Cp_FKP::Where() { WW8_FC nFc = WW8PLCFx_Fc_FKP::Where(); - if( pPcd ) - return pPcd->CurrentPieceStartFc2Cp( nFc ); // identify piece - return rSBase.WW8Fc2Cp( nFc ); // NO piece table !!! + if( m_pPcd ) + return m_pPcd->CurrentPieceStartFc2Cp( nFc ); // identify piece + return m_rSBase.WW8Fc2Cp( nFc ); // NO piece table !!! } void WW8PLCFx_Cp_FKP::GetSprms(WW8PLCFxDesc* p) @@ -3425,23 +3415,23 @@ void WW8PLCFx_Cp_FKP::GetSprms(WW8PLCFxDesc* p) Otherwise our cool fastsave algorithm can be brought to bear on the problem. */ - if( !pPieceIter ) + if( !m_pPieceIter ) return; - const sal_uInt32 nOldPos = pPieceIter->GetIdx(); - bool bOk = pPieceIter->SeekPos(nOrigCp); - pPieceIter->SetIdx(nOldPos); + const sal_uInt32 nOldPos = m_pPieceIter->GetIdx(); + bool bOk = m_pPieceIter->SeekPos(nOrigCp); + m_pPieceIter->SetIdx(nOldPos); if (!bOk) return; } - if( pPcd ) // piece table available + if( m_pPcd ) // piece table available { // Init ( no ++ called, yet ) - if( (nAttrStart > nAttrEnd) || (nAttrStart == -1) ) + if( (m_nAttrStart > m_nAttrEnd) || (m_nAttrStart == -1) ) { - p->bRealLineEnd = (ePLCF == PAP); + p->bRealLineEnd = (m_ePLCF == PAP); - if ( ((ePLCF == PAP ) || (ePLCF == CHP)) && (nOrigCp != WW8_CP_MAX) ) + if ( ((m_ePLCF == PAP ) || (m_ePLCF == CHP)) && (nOrigCp != WW8_CP_MAX) ) { bool bIsUnicode=false; /* @@ -3454,9 +3444,9 @@ void WW8PLCFx_Cp_FKP::GetSprms(WW8PLCFxDesc* p) //We set the piece iterator to the piece that contains the //character, now we have the correct piece for this character - sal_uInt32 nOldPos = pPieceIter->GetIdx(); + sal_uInt32 nOldPos = m_pPieceIter->GetIdx(); p->nStartPos = nOrigCp; - pPieceIter->SeekPos( p->nStartPos); + m_pPieceIter->SeekPos( p->nStartPos); //This is the FC assigned to the character, but we already //have the result of the next stage, so we can skip this step @@ -3478,11 +3468,11 @@ void WW8PLCFx_Cp_FKP::GetSprms(WW8PLCFxDesc* p) */ WW8_CP nCpStart, nCpEnd; void* pData=nullptr; - bool bOk = pPieceIter->Get(nCpStart, nCpEnd, pData); + bool bOk = m_pPieceIter->Get(nCpStart, nCpEnd, pData); if (!bOk) { - pPieceIter->SetIdx(nOldPos); + m_pPieceIter->SetIdx(nOldPos); return; } @@ -3501,7 +3491,7 @@ void WW8PLCFx_Cp_FKP::GetSprms(WW8PLCFxDesc* p) { SAL_WARN("sw.ww8", "broken offset, ignoring"); p->nStartPos = p->nEndPos = WW8_FC_MAX; - pPieceIter->SetIdx(nOldPos); + m_pPieceIter->SetIdx(nOldPos); return; } @@ -3512,7 +3502,7 @@ void WW8PLCFx_Cp_FKP::GetSprms(WW8PLCFxDesc* p) { SAL_WARN("sw.ww8", "broken offset, ignoring"); p->nStartPos = p->nEndPos = WW8_FC_MAX; - pPieceIter->SetIdx(nOldPos); + m_pPieceIter->SetIdx(nOldPos); return; } } @@ -3522,7 +3512,7 @@ void WW8PLCFx_Cp_FKP::GetSprms(WW8PLCFxDesc* p) { SAL_WARN("sw.ww8", "broken offset, ignoring"); p->nStartPos = p->nEndPos = WW8_FC_MAX; - pPieceIter->SetIdx(nOldPos); + m_pPieceIter->SetIdx(nOldPos); return; } @@ -3533,7 +3523,7 @@ void WW8PLCFx_Cp_FKP::GetSprms(WW8PLCFxDesc* p) { SAL_WARN("sw.ww8", "broken offset, ignoring"); p->nStartPos = p->nEndPos = WW8_FC_MAX; - pPieceIter->SetIdx(nOldPos); + m_pPieceIter->SetIdx(nOldPos); return; } @@ -3544,15 +3534,14 @@ void WW8PLCFx_Cp_FKP::GetSprms(WW8PLCFxDesc* p) { SAL_WARN("sw.ww8", "broken offset, ignoring"); p->nStartPos = p->nEndPos = WW8_FC_MAX; - pPieceIter->SetIdx(nOldPos); + m_pPieceIter->SetIdx(nOldPos); return; } } else { - if (ePLCF == CHP) - p->nEndPos = nCpEnd; - else + p->nEndPos = nCpEnd; + if (m_ePLCF != CHP) { /* If the FKP FC that was found was greater than the FC @@ -3572,12 +3561,12 @@ void WW8PLCFx_Cp_FKP::GetSprms(WW8PLCFxDesc* p) FKP fc */ - pPieceIter->advance(); + m_pPieceIter->advance(); - for (;pPieceIter->GetIdx() < pPieceIter->GetIMax(); - pPieceIter->advance()) + for (;m_pPieceIter->GetIdx() < m_pPieceIter->GetIMax(); + m_pPieceIter->advance()) { - if( !pPieceIter->Get( nCpStart, nCpEnd, pData ) ) + if( !m_pPieceIter->Get( nCpStart, nCpEnd, pData ) ) { OSL_ENSURE( false, "piece iter broken!" ); break; @@ -3659,23 +3648,23 @@ void WW8PLCFx_Cp_FKP::GetSprms(WW8PLCFxDesc* p) } } } - pPieceIter->SetIdx( nOldPos ); + m_pPieceIter->SetIdx( nOldPos ); } else - WW8PLCFx_PCD::CurrentPieceFc2Cp( p->nStartPos, p->nEndPos,&rSBase ); + WW8PLCFx_PCD::CurrentPieceFc2Cp( p->nStartPos, p->nEndPos,&m_rSBase ); } else { - p->nStartPos = nAttrStart; - p->nEndPos = nAttrEnd; - p->bRealLineEnd = bLineEnd; + p->nStartPos = m_nAttrStart; + p->nEndPos = m_nAttrEnd; + p->bRealLineEnd = m_bLineEnd; } } else // NO piece table !!! { - p->nStartPos = rSBase.WW8Fc2Cp( p->nStartPos ); - p->nEndPos = rSBase.WW8Fc2Cp( p->nEndPos ); - p->bRealLineEnd = ePLCF == PAP; + p->nStartPos = m_rSBase.WW8Fc2Cp( p->nStartPos ); + p->nEndPos = m_rSBase.WW8Fc2Cp( p->nEndPos ); + p->bRealLineEnd = m_ePLCF == PAP; } } @@ -3683,33 +3672,33 @@ void WW8PLCFx_Cp_FKP::advance() { WW8PLCFx_Fc_FKP::advance(); // !pPcd: emergency break - if ( !bComplex || !pPcd ) + if ( !m_bComplex || !m_pPcd ) return; - if( GetPCDIdx() >= pPcd->GetIMax() ) // End of PLCF + if( GetPCDIdx() >= m_pPcd->GetIMax() ) // End of PLCF { - nAttrStart = nAttrEnd = WW8_CP_MAX; + m_nAttrStart = m_nAttrEnd = WW8_CP_MAX; return; } sal_Int32 nFkpLen; // Fkp entry // get Fkp entry - WW8PLCFx_Fc_FKP::GetSprmsAndPos(nAttrStart, nAttrEnd, nFkpLen); + WW8PLCFx_Fc_FKP::GetSprmsAndPos(m_nAttrStart, m_nAttrEnd, nFkpLen); - WW8PLCFx_PCD::CurrentPieceFc2Cp( nAttrStart, nAttrEnd, &rSBase ); - bLineEnd = (ePLCF == PAP); + WW8PLCFx_PCD::CurrentPieceFc2Cp( m_nAttrStart, m_nAttrEnd, &m_rSBase ); + m_bLineEnd = (m_ePLCF == PAP); } WW8PLCFx_SEPX::WW8PLCFx_SEPX(SvStream* pSt, SvStream* pTableSt, const WW8Fib& rFib, WW8_CP nStartCp) : WW8PLCFx(rFib, true), maSprmParser(rFib), - pStrm(pSt), nArrMax(256), nSprmSiz(0) + m_pStrm(pSt), m_nArrMax(256), m_nSprmSiz(0) { if (rFib.m_lcbPlcfsed) - pPLCF.reset( new WW8PLCF(*pTableSt, rFib.m_fcPlcfsed, rFib.m_lcbPlcfsed, + m_pPLCF.reset( new WW8PLCF(*pTableSt, rFib.m_fcPlcfsed, rFib.m_lcbPlcfsed, GetFIBVersion() <= ww::eWW2 ? 6 : 12, nStartCp) ); - pSprms.reset( new sal_uInt8[nArrMax] ); // maximum length + m_pSprms.reset( new sal_uInt8[m_nArrMax] ); // maximum length } WW8PLCFx_SEPX::~WW8PLCFx_SEPX() @@ -3718,32 +3707,32 @@ WW8PLCFx_SEPX::~WW8PLCFx_SEPX() sal_uInt32 WW8PLCFx_SEPX::GetIdx() const { - return pPLCF ? pPLCF->GetIdx() : 0; + return m_pPLCF ? m_pPLCF->GetIdx() : 0; } void WW8PLCFx_SEPX::SetIdx(sal_uInt32 nIdx) { - if( pPLCF ) pPLCF->SetIdx( nIdx ); + if( m_pPLCF ) m_pPLCF->SetIdx( nIdx ); } bool WW8PLCFx_SEPX::SeekPos(WW8_CP nCpPos) { - return pPLCF && pPLCF->SeekPos( nCpPos ); + return m_pPLCF && m_pPLCF->SeekPos( nCpPos ); } WW8_CP WW8PLCFx_SEPX::Where() { - return pPLCF ? pPLCF->Where() : 0; + return m_pPLCF ? m_pPLCF->Where() : 0; } void WW8PLCFx_SEPX::GetSprms(WW8PLCFxDesc* p) { - if( !pPLCF ) return; + if( !m_pPLCF ) return; void* pData; p->bRealLineEnd = false; - if (!pPLCF->Get( p->nStartPos, p->nEndPos, pData )) + if (!m_pPLCF->Get( p->nStartPos, p->nEndPos, pData )) { p->nStartPos = p->nEndPos = WW8_CP_MAX; // PLCF completely processed p->pMemPos = nullptr; @@ -3752,7 +3741,7 @@ void WW8PLCFx_SEPX::GetSprms(WW8PLCFxDesc* p) else { sal_uInt32 nPo = SVBT32ToUInt32( static_cast<sal_uInt8*>(pData)+2 ); - if (nPo == 0xFFFFFFFF || !checkSeek(*pStrm, nPo)) + if (nPo == 0xFFFFFFFF || !checkSeek(*m_pStrm, nPo)) { p->nStartPos = p->nEndPos = WW8_CP_MAX; // Sepx empty p->pMemPos = nullptr; @@ -3764,47 +3753,47 @@ void WW8PLCFx_SEPX::GetSprms(WW8PLCFxDesc* p) if (GetFIBVersion() <= ww::eWW2) // eWW6 ?, docs say yes, but... { sal_uInt8 nSiz(0); - pStrm->ReadUChar( nSiz ); - nSprmSiz = nSiz; + m_pStrm->ReadUChar( nSiz ); + m_nSprmSiz = nSiz; } else { - pStrm->ReadUInt16( nSprmSiz ); + m_pStrm->ReadUInt16( m_nSprmSiz ); } - std::size_t nRemaining = pStrm->remainingSize(); - if (nSprmSiz > nRemaining) - nSprmSiz = nRemaining; + std::size_t nRemaining = m_pStrm->remainingSize(); + if (m_nSprmSiz > nRemaining) + m_nSprmSiz = nRemaining; - if( nSprmSiz > nArrMax ) + if( m_nSprmSiz > m_nArrMax ) { // does not fit - nArrMax = nSprmSiz; // Get more memory - pSprms.reset( new sal_uInt8[nArrMax] ); + m_nArrMax = m_nSprmSiz; // Get more memory + m_pSprms.reset( new sal_uInt8[m_nArrMax] ); } - nSprmSiz = pStrm->ReadBytes(pSprms.get(), nSprmSiz); // read Sprms + m_nSprmSiz = m_pStrm->ReadBytes(m_pSprms.get(), m_nSprmSiz); // read Sprms - p->nSprmsLen = nSprmSiz; - p->pMemPos = pSprms.get(); // return Position + p->nSprmsLen = m_nSprmSiz; + p->pMemPos = m_pSprms.get(); // return Position } } } void WW8PLCFx_SEPX::advance() { - if (pPLCF) - pPLCF->advance(); + if (m_pPLCF) + m_pPLCF->advance(); } SprmResult WW8PLCFx_SEPX::HasSprm(sal_uInt16 nId) const { - return HasSprm(nId, pSprms.get(), nSprmSiz); + return HasSprm(nId, m_pSprms.get(), m_nSprmSiz); } SprmResult WW8PLCFx_SEPX::HasSprm( sal_uInt16 nId, const sal_uInt8* pOtherSprms, tools::Long nOtherSprmSiz ) const { SprmResult aRet; - if (pPLCF) + if (m_pPLCF) { WW8SprmIter aIter(pOtherSprms, nOtherSprmSiz, maSprmParser); aRet = aIter.FindSprm(nId, /*bFindFirst=*/true); @@ -3815,18 +3804,18 @@ SprmResult WW8PLCFx_SEPX::HasSprm( sal_uInt16 nId, const sal_uInt8* pOtherSprms bool WW8PLCFx_SEPX::Find4Sprms(sal_uInt16 nId1,sal_uInt16 nId2,sal_uInt16 nId3,sal_uInt16 nId4, SprmResult& r1, SprmResult& r2, SprmResult& r3, SprmResult& r4) const { - if( !pPLCF ) + if( !m_pPLCF ) return false; bool bFound = false; - sal_uInt8* pSp = pSprms.get(); + sal_uInt8* pSp = m_pSprms.get(); size_t i = 0; - while (i + maSprmParser.MinSprmLen() <= nSprmSiz) + while (i + maSprmParser.MinSprmLen() <= m_nSprmSiz) { // Sprm found? const sal_uInt16 nCurrentId = maSprmParser.GetSprmId(pSp); - sal_Int32 nRemLen = nSprmSiz - i; + sal_Int32 nRemLen = m_nSprmSiz - i; const sal_Int32 x = maSprmParser.GetSprmSize(nCurrentId, pSp, nRemLen); bool bValid = x <= nRemLen; if (!bValid) @@ -3868,9 +3857,9 @@ bool WW8PLCFx_SEPX::Find4Sprms(sal_uInt16 nId1,sal_uInt16 nId2,sal_uInt16 nId3,s SprmResult WW8PLCFx_SEPX::HasSprm( sal_uInt16 nId, sal_uInt8 n2nd ) const { SprmResult aRet; - if (pPLCF) + if (m_pPLCF) { - WW8SprmIter aIter(pSprms.get(), nSprmSiz, maSprmParser); + WW8SprmIter aIter(m_pSprms.get(), m_nSprmSiz, maSprmParser); aRet = aIter.FindSprm(nId, /*bFindFirst=*/true, &n2nd); } return aRet; @@ -3883,43 +3872,43 @@ WW8PLCFx_SubDoc::WW8PLCFx_SubDoc(SvStream* pSt, const WW8Fib& rFib, { if( nLenRef && nLenText ) { - pRef.reset(new WW8PLCF(*pSt, nFcRef, nLenRef, nStruct, nStartCp)); - pText.reset(new WW8PLCF(*pSt, nFcText, nLenText, 0, nStartCp)); + m_pRef.reset(new WW8PLCF(*pSt, nFcRef, nLenRef, nStruct, nStartCp)); + m_pText.reset(new WW8PLCF(*pSt, nFcText, nLenText, 0, nStartCp)); } } WW8PLCFx_SubDoc::~WW8PLCFx_SubDoc() { - pRef.reset(); - pText.reset(); + m_pRef.reset(); + m_pText.reset(); } sal_uInt32 WW8PLCFx_SubDoc::GetIdx() const { // Probably pText ... no need for it - if( pRef ) - return ( pRef->GetIdx() << 16 | pText->GetIdx() ); + if( m_pRef ) + return ( m_pRef->GetIdx() << 16 | m_pText->GetIdx() ); return 0; } void WW8PLCFx_SubDoc::SetIdx(sal_uInt32 nIdx) { - if( pRef ) + if( m_pRef ) { - pRef->SetIdx( nIdx >> 16 ); + m_pRef->SetIdx( nIdx >> 16 ); // Probably pText ... no need for it - pText->SetIdx( nIdx & 0xFFFF ); + m_pText->SetIdx( nIdx & 0xFFFF ); } } bool WW8PLCFx_SubDoc::SeekPos( WW8_CP nCpPos ) { - return pRef && pRef->SeekPos( nCpPos ); + return m_pRef && m_pRef->SeekPos( nCpPos ); } WW8_CP WW8PLCFx_SubDoc::Where() { - return pRef ? pRef->Where() : WW8_CP_MAX; + return m_pRef ? m_pRef->Where() : WW8_CP_MAX; } void WW8PLCFx_SubDoc::GetSprms(WW8PLCFxDesc* p) @@ -3929,14 +3918,14 @@ void WW8PLCFx_SubDoc::GetSprms(WW8PLCFxDesc* p) p->nSprmsLen = 0; p->bRealLineEnd = false; - if (!pRef) + if (!m_pRef) return; - sal_uInt32 nNr = pRef->GetIdx(); + sal_uInt32 nNr = m_pRef->GetIdx(); void *pData; WW8_CP nFoo; - if (!pRef->Get(p->nStartPos, nFoo, pData)) + if (!m_pRef->Get(p->nStartPos, nFoo, pData)) { p->nEndPos = p->nStartPos = WW8_CP_MAX; return; @@ -3949,12 +3938,12 @@ void WW8PLCFx_SubDoc::GetSprms(WW8PLCFxDesc* p) return; } - if (!pText) + if (!m_pText) return; - pText->SetIdx(nNr); + m_pText->SetIdx(nNr); - if (!pText->Get(p->nCp2OrIdx, p->nSprmsLen, pData)) + if (!m_pText->Get(p->nCp2OrIdx, p->nSprmsLen, pData)) { p->nEndPos = p->nStartPos = WW8_CP_MAX; p->nSprmsLen = 0; @@ -3974,16 +3963,16 @@ void WW8PLCFx_SubDoc::GetSprms(WW8PLCFxDesc* p) void WW8PLCFx_SubDoc::advance() { - if (pRef && pText) + if (m_pRef && m_pText) { - pRef->advance(); - pText->advance(); + m_pRef->advance(); + m_pText->advance(); } } // fields WW8PLCFx_FLD::WW8PLCFx_FLD( SvStream* pSt, const WW8Fib& rMyFib, short nType) - : WW8PLCFx(rMyFib, true), rFib(rMyFib) + : WW8PLCFx(rMyFib, true), m_rFib(rMyFib) { WW8_FC nFc; sal_Int32 nLen; @@ -3991,37 +3980,37 @@ WW8PLCFx_FLD::WW8PLCFx_FLD( SvStream* pSt, const WW8Fib& rMyFib, short nType) switch( nType ) { case MAN_HDFT: - nFc = rFib.m_fcPlcffldHdr; - nLen = rFib.m_lcbPlcffldHdr; + nFc = m_rFib.m_fcPlcffldHdr; + nLen = m_rFib.m_lcbPlcffldHdr; break; case MAN_FTN: - nFc = rFib.m_fcPlcffldFootnote; - nLen = rFib.m_lcbPlcffldFootnote; + nFc = m_rFib.m_fcPlcffldFootnote; + nLen = m_rFib.m_lcbPlcffldFootnote; break; case MAN_EDN: - nFc = rFib.m_fcPlcffldEdn; - nLen = rFib.m_lcbPlcffldEdn; + nFc = m_rFib.m_fcPlcffldEdn; + nLen = m_rFib.m_lcbPlcffldEdn; break; case MAN_AND: - nFc = rFib.m_fcPlcffldAtn; - nLen = rFib.m_lcbPlcffldAtn; + nFc = m_rFib.m_fcPlcffldAtn; + nLen = m_rFib.m_lcbPlcffldAtn; break; case MAN_TXBX: - nFc = rFib.m_fcPlcffldTxbx; - nLen = rFib.m_lcbPlcffldTxbx; + nFc = m_rFib.m_fcPlcffldTxbx; + nLen = m_rFib.m_lcbPlcffldTxbx; break; case MAN_TXBX_HDFT: - nFc = rFib.m_fcPlcffldHdrTxbx; - nLen = rFib.m_lcbPlcffldHdrTxbx; + nFc = m_rFib.m_fcPlcffldHdrTxbx; + nLen = m_rFib.m_lcbPlcffldHdrTxbx; break; default: - nFc = rFib.m_fcPlcffldMom; - nLen = rFib.m_lcbPlcffldMom; + nFc = m_rFib.m_fcPlcffldMom; + nLen = m_rFib.m_lcbPlcffldMom; break; } if( nLen ) - pPLCF.reset( new WW8PLCFspecial( pSt, nFc, nLen, 2 ) ); + m_pPLCF.reset( new WW8PLCFspecial( pSt, nFc, nLen, 2 ) ); } WW8PLCFx_FLD::~WW8PLCFx_FLD() @@ -4030,51 +4019,51 @@ WW8PLCFx_FLD::~WW8PLCFx_FLD() sal_uInt32 WW8PLCFx_FLD::GetIdx() const { - return pPLCF ? pPLCF->GetIdx() : 0; + return m_pPLCF ? m_pPLCF->GetIdx() : 0; } void WW8PLCFx_FLD::SetIdx(sal_uInt32 nIdx) { - if( pPLCF ) - pPLCF->SetIdx( nIdx ); + if( m_pPLCF ) + m_pPLCF->SetIdx( nIdx ); } bool WW8PLCFx_FLD::SeekPos(WW8_CP nCpPos) { - return pPLCF && pPLCF->SeekPosExact( nCpPos ); + return m_pPLCF && m_pPLCF->SeekPosExact( nCpPos ); } WW8_CP WW8PLCFx_FLD::Where() { - return pPLCF ? pPLCF->Where() : WW8_CP_MAX; + return m_pPLCF ? m_pPLCF->Where() : WW8_CP_MAX; } bool WW8PLCFx_FLD::StartPosIsFieldStart() { void* pData; sal_Int32 nTest; - return pPLCF && pPLCF->Get(nTest, pData) && ((static_cast<sal_uInt8*>(pData)[0] & 0x1f) == 0x13); + return m_pPLCF && m_pPLCF->Get(nTest, pData) && ((static_cast<sal_uInt8*>(pData)[0] & 0x1f) == 0x13); } bool WW8PLCFx_FLD::EndPosIsFieldEnd(WW8_CP& nCP) { bool bRet = false; - if (pPLCF) + if (m_pPLCF) { - tools::Long n = pPLCF->GetIdx(); + tools::Long n = m_pPLCF->GetIdx(); - pPLCF->advance(); + m_pPLCF->advance(); void* pData; sal_Int32 nTest; - if ( pPLCF->Get(nTest, pData) && ((static_cast<sal_uInt8*>(pData)[0] & 0x1f) == 0x15) ) + if ( m_pPLCF->Get(nTest, pData) && ((static_cast<sal_uInt8*>(pData)[0] & 0x1f) == 0x15) ) { nCP = nTest; bRet = true; } - pPLCF->SetIdx(n); + m_pPLCF->SetIdx(n); } return bRet; @@ -4087,17 +4076,17 @@ void WW8PLCFx_FLD::GetSprms(WW8PLCFxDesc* p) p->nSprmsLen = 0; p->bRealLineEnd = false; - if (!pPLCF) + if (!m_pPLCF) { p->nStartPos = WW8_CP_MAX; // there are no fields return; } - tools::Long n = pPLCF->GetIdx(); + tools::Long n = m_pPLCF->GetIdx(); sal_Int32 nP; void *pData; - if (!pPLCF->Get(nP, pData)) // end of PLCFspecial? + if (!m_pPLCF->Get(nP, pData)) // end of PLCFspecial? { p->nStartPos = WW8_CP_MAX; // PLCF completely processed return; @@ -4105,8 +4094,8 @@ void WW8PLCFx_FLD::GetSprms(WW8PLCFxDesc* p) p->nStartPos = nP; - pPLCF->advance(); - if (!pPLCF->Get(nP, pData)) // end of PLCFspecial? + m_pPLCF->advance(); + if (!m_pPLCF->Get(nP, pData)) // end of PLCFspecial? { p->nStartPos = WW8_CP_MAX; // PLCF completely processed return; @@ -4114,31 +4103,31 @@ void WW8PLCFx_FLD::GetSprms(WW8PLCFxDesc* p) p->nEndPos = nP; - pPLCF->SetIdx(n); + m_pPLCF->SetIdx(n); - p->nCp2OrIdx = pPLCF->GetIdx(); + p->nCp2OrIdx = m_pPLCF->GetIdx(); } void WW8PLCFx_FLD::advance() { - SAL_WARN_IF(!pPLCF, "sw.ww8", "Call without PLCFspecial field"); - if( !pPLCF ) + SAL_WARN_IF(!m_pPLCF, "sw.ww8", "Call without PLCFspecial field"); + if( !m_pPLCF ) return; - pPLCF->advance(); + m_pPLCF->advance(); } bool WW8PLCFx_FLD::GetPara(tools::Long nIdx, WW8FieldDesc& rF) { - SAL_WARN_IF(!pPLCF, "sw.ww8", "Call without PLCFspecial field"); - if( !pPLCF ) + SAL_WARN_IF(!m_pPLCF, "sw.ww8", "Call without PLCFspecial field"); + if( !m_pPLCF ) return false; - tools::Long n = pPLCF->GetIdx(); - pPLCF->SetIdx(nIdx); + tools::Long n = m_pPLCF->GetIdx(); + m_pPLCF->SetIdx(nIdx); - bool bOk = WW8GetFieldPara(*pPLCF, rF); + bool bOk = WW8GetFieldPara(*m_pPLCF, rF); - pPLCF->SetIdx(n); + m_pPLCF->SetIdx(n); return bOk; } @@ -4236,7 +4225,7 @@ void WW8ReadSTTBF(bool bVer8, SvStream& rStrm, sal_uInt32 nStart, sal_Int32 nLen nLen = SAL_MAX_UINT16; else if (nLen < 2 ) nLen = 2; - nLen2 = static_cast<sal_uInt16>(nLen); + nLen2 = o3tl::narrowing<sal_uInt16>(nLen); } sal_uLong nRead = 0; for( nLen2 -= 2; nRead < nLen2; ) @@ -4274,31 +4263,31 @@ void WW8ReadSTTBF(bool bVer8, SvStream& rStrm, sal_uInt32 nStart, sal_Int32 nLen } WW8PLCFx_Book::WW8PLCFx_Book(SvStream* pTableSt, const WW8Fib& rFib) - : WW8PLCFx(rFib, false), nIsEnd(0), nBookmarkId(1) + : WW8PLCFx(rFib, false), m_nIsEnd(0), m_nBookmarkId(1) { if( !rFib.m_fcPlcfbkf || !rFib.m_lcbPlcfbkf || !rFib.m_fcPlcfbkl || !rFib.m_lcbPlcfbkl || !rFib.m_fcSttbfbkmk || !rFib.m_lcbSttbfbkmk ) { - nIMax = 0; + m_nIMax = 0; } else { - pBook[0].reset( new WW8PLCFspecial(pTableSt,rFib.m_fcPlcfbkf,rFib.m_lcbPlcfbkf,4) ); + m_pBook[0].reset( new WW8PLCFspecial(pTableSt,rFib.m_fcPlcfbkf,rFib.m_lcbPlcfbkf,4) ); - pBook[1].reset( new WW8PLCFspecial(pTableSt,rFib.m_fcPlcfbkl,rFib.m_lcbPlcfbkl,0) ); + m_pBook[1].reset( new WW8PLCFspecial(pTableSt,rFib.m_fcPlcfbkl,rFib.m_lcbPlcfbkl,0) ); rtl_TextEncoding eStructChrSet = WW8Fib::GetFIBCharset(rFib.m_chseTables, rFib.m_lid); WW8ReadSTTBF( (7 < rFib.m_nVersion), *pTableSt, rFib.m_fcSttbfbkmk, - rFib.m_lcbSttbfbkmk, 0, eStructChrSet, aBookNames ); + rFib.m_lcbSttbfbkmk, 0, eStructChrSet, m_aBookNames ); - nIMax = aBookNames.size(); + m_nIMax = m_aBookNames.size(); - if( pBook[0]->GetIMax() < nIMax ) // Count of Bookmarks - nIMax = pBook[0]->GetIMax(); - if( pBook[1]->GetIMax() < nIMax ) - nIMax = pBook[1]->GetIMax(); - aStatus.resize(nIMax); + if( m_pBook[0]->GetIMax() < m_nIMax ) // Count of Bookmarks + m_nIMax = m_pBook[0]->GetIMax(); + if( m_pBook[1]->GetIMax() < m_nIMax ) + m_nIMax = m_pBook[1]->GetIMax(); + m_aStatus.resize(m_nIMax); } } @@ -4308,44 +4297,44 @@ WW8PLCFx_Book::~WW8PLCFx_Book() sal_uInt32 WW8PLCFx_Book::GetIdx() const { - return nIMax ? pBook[0]->GetIdx() : 0; + return m_nIMax ? m_pBook[0]->GetIdx() : 0; } void WW8PLCFx_Book::SetIdx(sal_uInt32 nI) { - if( nIMax ) - pBook[0]->SetIdx( nI ); + if( m_nIMax ) + m_pBook[0]->SetIdx( nI ); } sal_uInt32 WW8PLCFx_Book::GetIdx2() const { - return nIMax ? ( pBook[1]->GetIdx() | ( nIsEnd ? 0x80000000 : 0 ) ) : 0; + return m_nIMax ? ( m_pBook[1]->GetIdx() | ( m_nIsEnd ? 0x80000000 : 0 ) ) : 0; } void WW8PLCFx_Book::SetIdx2(sal_uInt32 nI) { - if( nIMax ) + if( m_nIMax ) { - pBook[1]->SetIdx( nI & 0x7fffffff ); - nIsEnd = static_cast<sal_uInt16>( ( nI >> 31 ) & 1 ); // 0 or 1 + m_pBook[1]->SetIdx( nI & 0x7fffffff ); + m_nIsEnd = o3tl::narrowing<sal_uInt16>( ( nI >> 31 ) & 1 ); // 0 or 1 } } bool WW8PLCFx_Book::SeekPos(WW8_CP nCpPos) { - if( !pBook[0] ) + if( !m_pBook[0] ) return false; - bool bOk = pBook[0]->SeekPosExact( nCpPos ); - bOk &= pBook[1]->SeekPosExact( nCpPos ); - nIsEnd = 0; + bool bOk = m_pBook[0]->SeekPosExact( nCpPos ); + bOk &= m_pBook[1]->SeekPosExact( nCpPos ); + m_nIsEnd = 0; return bOk; } WW8_CP WW8PLCFx_Book::Where() { - return pBook[nIsEnd]->Where(); + return m_pBook[m_nIsEnd]->Where(); } tools::Long WW8PLCFx_Book::GetNoSprms( WW8_CP& rStart, WW8_CP& rEnd, sal_Int32& rLen ) @@ -4354,14 +4343,14 @@ tools::Long WW8PLCFx_Book::GetNoSprms( WW8_CP& rStart, WW8_CP& rEnd, sal_Int32& rEnd = WW8_CP_MAX; rLen = 0; - if (!pBook[0] || !pBook[1] || !nIMax || (pBook[nIsEnd]->GetIdx()) >= nIMax) + if (!m_pBook[0] || !m_pBook[1] || !m_nIMax || (m_pBook[m_nIsEnd]->GetIdx()) >= m_nIMax) { rStart = rEnd = WW8_CP_MAX; return -1; } - (void)pBook[nIsEnd]->Get( rStart, pData ); // query position - return pBook[nIsEnd]->GetIdx(); + (void)m_pBook[m_nIsEnd]->Get( rStart, pData ); // query position + return m_pBook[m_nIsEnd]->GetIdx(); } // The operator ++ has a pitfall: If 2 bookmarks adjoin each other, @@ -4379,74 +4368,74 @@ tools::Long WW8PLCFx_Book::GetNoSprms( WW8_CP& rStart, WW8_CP& rEnd, sal_Int32& void WW8PLCFx_Book::advance() { - if( !(pBook[0] && pBook[1] && nIMax) ) + if( !(m_pBook[0] && m_pBook[1] && m_nIMax) ) return; - (*pBook[nIsEnd]).advance(); + (*m_pBook[m_nIsEnd]).advance(); - sal_uLong l0 = pBook[0]->Where(); - sal_uLong l1 = pBook[1]->Where(); + sal_uLong l0 = m_pBook[0]->Where(); + sal_uLong l1 = m_pBook[1]->Where(); if( l0 < l1 ) - nIsEnd = 0; + m_nIsEnd = 0; else if( l1 < l0 ) - nIsEnd = 1; + m_nIsEnd = 1; else { - const void * p = pBook[0]->GetData(pBook[0]->GetIdx()); + const void * p = m_pBook[0]->GetData(m_pBook[0]->GetIdx()); tools::Long nPairFor = (p == nullptr) ? 0 : SVBT16ToUInt16(*static_cast<SVBT16 const *>(p)); - if (nPairFor == pBook[1]->GetIdx()) - nIsEnd = 0; + if (nPairFor == m_pBook[1]->GetIdx()) + m_nIsEnd = 0; else - nIsEnd = nIsEnd ? 0 : 1; + m_nIsEnd = m_nIsEnd ? 0 : 1; } } tools::Long WW8PLCFx_Book::GetLen() const { - if( nIsEnd ) + if( m_nIsEnd ) { OSL_ENSURE( false, "Incorrect call (1) of PLCF_Book::GetLen()" ); return 0; } void * p; WW8_CP nStartPos; - if( !pBook[0]->Get( nStartPos, p ) ) + if( !m_pBook[0]->Get( nStartPos, p ) ) { OSL_ENSURE( false, "Incorrect call (2) of PLCF_Book::GetLen()" ); return 0; } const sal_uInt16 nEndIdx = SVBT16ToUInt16( *static_cast<SVBT16*>(p) ); - tools::Long nNum = pBook[1]->GetPos( nEndIdx ); + tools::Long nNum = m_pBook[1]->GetPos( nEndIdx ); nNum -= nStartPos; return nNum; } void WW8PLCFx_Book::SetStatus(sal_uInt16 nIndex, eBookStatus eStat) { - SAL_WARN_IF(nIndex >= nIMax, "sw.ww8", + SAL_WARN_IF(nIndex >= m_nIMax, "sw.ww8", "bookmark index " << nIndex << " invalid"); - eBookStatus eStatus = aStatus.at(nIndex); - aStatus[nIndex] = static_cast<eBookStatus>(eStatus | eStat); + eBookStatus eStatus = m_aStatus.at(nIndex); + m_aStatus[nIndex] = static_cast<eBookStatus>(eStatus | eStat); } eBookStatus WW8PLCFx_Book::GetStatus() const { - if (aStatus.empty()) + if (m_aStatus.empty()) return BOOK_NORMAL; tools::Long nEndIdx = GetHandle(); - return ( nEndIdx < nIMax ) ? aStatus[nEndIdx] : BOOK_NORMAL; + return ( nEndIdx < m_nIMax ) ? m_aStatus[nEndIdx] : BOOK_NORMAL; } tools::Long WW8PLCFx_Book::GetHandle() const { - if( !pBook[0] || !pBook[1] ) + if( !m_pBook[0] || !m_pBook[1] ) return LONG_MAX; - if( nIsEnd ) - return pBook[1]->GetIdx(); + if( m_nIsEnd ) + return m_pBook[1]->GetIdx(); else { - if (const void* p = pBook[0]->GetData(pBook[0]->GetIdx())) + if (const void* p = m_pBook[0]->GetData(m_pBook[0]->GetIdx())) return SVBT16ToUInt16( *static_cast<SVBT16 const *>(p) ); else return LONG_MAX; @@ -4457,15 +4446,15 @@ OUString WW8PLCFx_Book::GetBookmark(tools::Long nStart,tools::Long nEnd, sal_uIn { bool bFound = false; sal_uInt16 i = 0; - if (pBook[0] && pBook[1]) + if (m_pBook[0] && m_pBook[1]) { WW8_CP nStartCurrent, nEndCurrent; - while (sal::static_int_cast<decltype(aBookNames)::size_type>(i) < aBookNames.size()) + while (sal::static_int_cast<decltype(m_aBookNames)::size_type>(i) < m_aBookNames.size()) { void* p; sal_uInt16 nEndIdx; - if( pBook[0]->GetData( i, nStartCurrent, p ) && p ) + if( m_pBook[0]->GetData( i, nStartCurrent, p ) && p ) nEndIdx = SVBT16ToUInt16( *static_cast<SVBT16*>(p) ); else { @@ -4473,7 +4462,7 @@ OUString WW8PLCFx_Book::GetBookmark(tools::Long nStart,tools::Long nEnd, sal_uIn nEndIdx = i; } - nEndCurrent = pBook[1]->GetPos( nEndIdx ); + nEndCurrent = m_pBook[1]->GetPos( nEndIdx ); if ((nStartCurrent >= nStart) && (nEndCurrent <= nEnd)) { @@ -4484,22 +4473,22 @@ OUString WW8PLCFx_Book::GetBookmark(tools::Long nStart,tools::Long nEnd, sal_uIn ++i; } } - return bFound ? aBookNames[i] : OUString(); + return bFound ? m_aBookNames[i] : OUString(); } OUString WW8PLCFx_Book::GetUniqueBookmarkName(const OUString &rSuggestedName) { OUString aRet(rSuggestedName.isEmpty() ? OUString("Unnamed") : rSuggestedName); size_t i = 0; - while (i < aBookNames.size()) + while (i < m_aBookNames.size()) { - if (aRet == aBookNames[i]) + if (aRet == m_aBookNames[i]) { sal_Int32 len = aRet.getLength(); sal_Int32 p = len - 1; while (p > 0 && aRet[p] >= '0' && aRet[p] <= '9') --p; - aRet = aRet.subView(0, p+1) + OUString::number(nBookmarkId++); + aRet = aRet.subView(0, p+1) + OUString::number(m_nBookmarkId++); i = 0; // start search from beginning } else @@ -4510,15 +4499,15 @@ OUString WW8PLCFx_Book::GetUniqueBookmarkName(const OUString &rSuggestedName) void WW8PLCFx_Book::MapName(OUString& rName) { - if( !pBook[0] || !pBook[1] ) + if( !m_pBook[0] || !m_pBook[1] ) return; size_t i = 0; - while (i < aBookNames.size()) + while (i < m_aBookNames.size()) { - if (rName.equalsIgnoreAsciiCase(aBookNames[i])) + if (rName.equalsIgnoreAsciiCase(m_aBookNames[i])) { - rName = aBookNames[i]; + rName = m_aBookNames[i]; break; } ++i; @@ -4528,8 +4517,8 @@ void WW8PLCFx_Book::MapName(OUString& rName) const OUString* WW8PLCFx_Book::GetName() const { const OUString *pRet = nullptr; - if (!nIsEnd && (pBook[0]->GetIdx() < nIMax)) - pRet = &(aBookNames[pBook[0]->GetIdx()]); + if (!m_nIsEnd && (m_pBook[0]->GetIdx() < m_nIMax)) + pRet = &(m_aBookNames[m_pBook[0]->GetIdx()]); return pRet; } @@ -4539,16 +4528,16 @@ WW8PLCFx_AtnBook::WW8PLCFx_AtnBook(SvStream* pTableSt, const WW8Fib& rFib) { if (!rFib.m_fcPlcfAtnbkf || !rFib.m_lcbPlcfAtnbkf || !rFib.m_fcPlcfAtnbkl || !rFib.m_lcbPlcfAtnbkl) { - nIMax = 0; + m_nIMax = 0; } else { m_pBook[0].reset( new WW8PLCFspecial(pTableSt, rFib.m_fcPlcfAtnbkf, rFib.m_lcbPlcfAtnbkf, 4) ); m_pBook[1].reset( new WW8PLCFspecial(pTableSt, rFib.m_fcPlcfAtnbkl, rFib.m_lcbPlcfAtnbkl, 0) ); - nIMax = m_pBook[0]->GetIMax(); - if (m_pBook[1]->GetIMax() < nIMax) - nIMax = m_pBook[1]->GetIMax(); + m_nIMax = m_pBook[0]->GetIMax(); + if (m_pBook[1]->GetIMax() < m_nIMax) + m_nIMax = m_pBook[1]->GetIMax(); } } @@ -4558,18 +4547,18 @@ WW8PLCFx_AtnBook::~WW8PLCFx_AtnBook() sal_uInt32 WW8PLCFx_AtnBook::GetIdx() const { - return nIMax ? m_pBook[0]->GetIdx() : 0; + return m_nIMax ? m_pBook[0]->GetIdx() : 0; } void WW8PLCFx_AtnBook::SetIdx(sal_uInt32 nI) { - if( nIMax ) + if( m_nIMax ) m_pBook[0]->SetIdx( nI ); } sal_uInt32 WW8PLCFx_AtnBook::GetIdx2() const { - if (nIMax) + if (m_nIMax) return m_pBook[1]->GetIdx() | ( m_bIsEnd ? 0x80000000 : 0 ); else return 0; @@ -4577,7 +4566,7 @@ sal_uInt32 WW8PLCFx_AtnBook::GetIdx2() const void WW8PLCFx_AtnBook::SetIdx2(sal_uInt32 nI) { - if( nIMax ) + if( m_nIMax ) { m_pBook[1]->SetIdx( nI & 0x7fffffff ); m_bIsEnd = static_cast<bool>(( nI >> 31 ) & 1); @@ -4607,7 +4596,7 @@ tools::Long WW8PLCFx_AtnBook::GetNoSprms( WW8_CP& rStart, WW8_CP& rEnd, sal_Int3 rEnd = WW8_CP_MAX; rLen = 0; - if (!m_pBook[0] || !m_pBook[1] || !nIMax || (m_pBook[static_cast<int>(m_bIsEnd)]->GetIdx()) >= nIMax) + if (!m_pBook[0] || !m_pBook[1] || !m_nIMax || (m_pBook[static_cast<int>(m_bIsEnd)]->GetIdx()) >= m_nIMax) { rStart = rEnd = WW8_CP_MAX; return -1; @@ -4619,7 +4608,7 @@ tools::Long WW8PLCFx_AtnBook::GetNoSprms( WW8_CP& rStart, WW8_CP& rEnd, sal_Int3 void WW8PLCFx_AtnBook::advance() { - if( !(m_pBook[0] && m_pBook[1] && nIMax) ) + if( !(m_pBook[0] && m_pBook[1] && m_nIMax) ) return; (*m_pBook[static_cast<int>(m_bIsEnd)]).advance(); @@ -5074,7 +5063,7 @@ WW8PLCFMan::WW8PLCFMan(const WW8ScannerBase* pBase, ManTypes nType, tools::Long if( p->pPLCFx->IsSprm() ) { // Careful: nEndPos must be - p->xIdStack.reset(new std::stack<sal_uInt16>); + p->xIdStack.emplace(); if ((p == m_pChp) || (p == m_pPap)) { WW8_CP nTemp = p->nEndPos+p->nCpOfs; @@ -5226,7 +5215,8 @@ bool WW8PLCFMan::IsSprmLegalForCategory(sal_uInt16 nSprmId, short nIdx) const auto nSGC = ((nSprmId & 0x1C00) >> 10); bRet = nSGC == 4; } - SAL_WARN_IF(!bRet, "sw.ww8", "sprm, id " << nSprmId << " wrong category for section properties"); + if (!bRet) + SAL_INFO("sw.ww8", "sprm, id " << nSprmId << " wrong category for section properties"); return bRet; } @@ -5400,7 +5390,7 @@ void WW8PLCFMan::AdvSprm(short nIdx, bool bStart) p->nStartPos = p->nOrigEndPos+p->nCpOfs; /* - On failed seek we have run out of sprms, probably. But if its + On failed seek we have run out of sprms, probably. But if it's a fastsaved file (has pPcd) then we may be just in a sprm free gap between pieces that have them, so set dirty flag in sprm finder to consider than. @@ -5630,31 +5620,31 @@ sal_uInt32 WW8PLCFx_Cp_FKP::GetIdx2() const void WW8PLCFx_Cp_FKP::SetIdx2(sal_uInt32 nIdx) { - if( pPcd ) - pPcd->SetIdx( nIdx ); + if( m_pPcd ) + m_pPcd->SetIdx( nIdx ); } void WW8PLCFx_Cp_FKP::Save( WW8PLCFxSave1& rSave ) const { - if (pFkp) - pFkp->IncMustRemainCache(); + if (m_pFkp) + m_pFkp->IncMustRemainCache(); WW8PLCFx::Save( rSave ); - rSave.nAttrStart = nAttrStart; - rSave.nAttrEnd = nAttrEnd; - rSave.bLineEnd = bLineEnd; + rSave.nAttrStart = m_nAttrStart; + rSave.nAttrEnd = m_nAttrEnd; + rSave.bLineEnd = m_bLineEnd; } void WW8PLCFx_Cp_FKP::Restore( const WW8PLCFxSave1& rSave ) { WW8PLCFx::Restore( rSave ); - nAttrStart = rSave.nAttrStart; - nAttrEnd = rSave.nAttrEnd; - bLineEnd = rSave.bLineEnd; + m_nAttrStart = rSave.nAttrStart; + m_nAttrEnd = rSave.nAttrEnd; + m_bLineEnd = rSave.bLineEnd; - if (pFkp) - pFkp->DecMustRemainCache(); + if (m_pFkp) + m_pFkp->DecMustRemainCache(); } void WW8PLCFxDesc::Save( WW8PLCFxSave1& rSave ) const @@ -5853,9 +5843,6 @@ WW8Fib::WW8Fib(SvStream& rSt, sal_uInt8 nWantedVersion, sal_uInt32 nOffset): // above bit-field member initializations can be moved to the class definition { // See [MS-DOC] 2.5.15 "How to read the FIB". - sal_uInt8 aBits1; - sal_uInt8 aBits2; - sal_uInt8 aVer8Bits1; // only used starting with WinWord 8 rSt.Seek( nOffset ); /* note desired number, identify file version number @@ -5914,13 +5901,16 @@ WW8Fib::WW8Fib(SvStream& rSt, sal_uInt8 nWantedVersion, sal_uInt32 nOffset): rSt.ReadUInt16(nTmpLid); m_lid = LanguageType(nTmpLid); rSt.ReadInt16( m_pnNext ); + sal_uInt8 aBits1(0); rSt.ReadUChar( aBits1 ); + sal_uInt8 aBits2(0); rSt.ReadUChar( aBits2 ); rSt.ReadUInt16( m_nFibBack ); rSt.ReadUInt16( m_nHash ); rSt.ReadUInt16( m_nKey ); rSt.ReadUChar( m_envr ); - rSt.ReadUChar( aVer8Bits1 ); // only have an empty reserve field under Ver67 + sal_uInt8 aVer8Bits1(0); // only used starting with WinWord 8 + rSt.ReadUChar( aVer8Bits1 ); // only have an empty reserve field under Ver67 // content from aVer8Bits1 // sal_uInt8 fMac :1; @@ -6005,7 +5995,7 @@ WW8Fib::WW8Fib(SvStream& rSt, sal_uInt8 nWantedVersion, sal_uInt32 nOffset): rSt.ReadUInt16( m_cfclcb ); // Read cswNew to find out if nFib should be ignored. - sal_uInt32 nPos = rSt.Tell(); + sal_uInt64 nPos = rSt.Tell(); rSt.SeekRel(m_cfclcb * 8); if (rSt.good() && rSt.remainingSize() >= 2) { @@ -6213,7 +6203,7 @@ WW8Fib::WW8Fib(SvStream& rSt, sal_uInt8 nWantedVersion, sal_uInt32 nOffset): identify the values for PLCF and PLF LFO and PLCF for the textbox break descriptors */ - tools::Long nOldPos = rSt.Tell(); + sal_uInt64 nOldPos = rSt.Tell(); rSt.Seek( 0x02da ); rSt.ReadInt32( m_fcSttbFnm ); @@ -6333,7 +6323,7 @@ WW8Fib::WW8Fib(sal_uInt8 nVer, bool bDot): m_lidFE = m_lid; LanguageTag aLanguageTag( m_lid ); - LocaleDataWrapper aLocaleWrapper( aLanguageTag ); + LocaleDataWrapper aLocaleWrapper( std::move(aLanguageTag) ); m_nNumDecimalSep = aLocaleWrapper.getNumDecimalSep()[0]; } @@ -6554,10 +6544,10 @@ void WW8Fib::Write(SvStream& rStrm) if( !bVer8 ) { pData += 1*sizeof( sal_Int16); - Set_UInt16( pData, static_cast<sal_uInt16>(m_pnChpFirst) ); - Set_UInt16( pData, static_cast<sal_uInt16>(m_pnPapFirst) ); - Set_UInt16( pData, static_cast<sal_uInt16>(m_cpnBteChp) ); - Set_UInt16( pData, static_cast<sal_uInt16>(m_cpnBtePap) ); + Set_UInt16( pData, o3tl::narrowing<sal_uInt16>(m_pnChpFirst) ); + Set_UInt16( pData, o3tl::narrowing<sal_uInt16>(m_pnPapFirst) ); + Set_UInt16( pData, o3tl::narrowing<sal_uInt16>(m_cpnBteChp) ); + Set_UInt16( pData, o3tl::narrowing<sal_uInt16>(m_cpnBtePap) ); } Set_UInt32( pData, m_fcPlcfdoaMom ); // only at Ver67, in Ver8 unused @@ -6703,13 +6693,13 @@ static OUString Read(SvStream& rStream) return aRet; } -static void Write(const OUString& rString, SvStream& rStream) +static void Write(std::u16string_view aString, SvStream& rStream) { sal_uInt16 nBuf = 0; - nBuf |= rString.getLength(); // cch, 0..14th bits. + nBuf |= sal_Int32(aString.size()); // cch, 0..14th bits. nBuf |= 0x8000; // fAnsiString, 15th bit. rStream.WriteUInt16(nBuf); - SwWW8Writer::WriteString8(rStream, rString, false, RTL_TEXTENCODING_ASCII_US); + SwWW8Writer::WriteString8(rStream, aString, false, RTL_TEXTENCODING_ASCII_US); } }; @@ -6725,13 +6715,13 @@ void MSOFactoidType::Read(SvStream& rStream) void MSOFactoidType::Write(WW8Export& rExport) { - SvStream& rStream = *rExport.pTableStrm; + SvStream& rStream = *rExport.m_pTableStrm; SvMemoryStream aStream; aStream.WriteUInt32(m_nId); // id MSOPBString::Write(m_aUri, aStream); MSOPBString::Write(m_aTag, aStream); - MSOPBString::Write("", aStream); // rgbDownloadURL + MSOPBString::Write(u"", aStream); // rgbDownloadURL rStream.WriteUInt32(aStream.Tell()); aStream.Seek(0); rStream.WriteStream(aStream); @@ -6774,7 +6764,7 @@ void MSOPropertyBagStore::Read(SvStream& rStream) void MSOPropertyBagStore::Write(WW8Export& rExport) { - SvStream& rStream = *rExport.pTableStrm; + SvStream& rStream = *rExport.m_pTableStrm; rStream.WriteUInt32(m_aFactoidTypes.size()); // cFactoidType for (MSOFactoidType& rType : m_aFactoidTypes) rType.Write(rExport); @@ -6835,7 +6825,7 @@ bool MSOPropertyBag::Read(SvStream& rStream) void MSOPropertyBag::Write(WW8Export& rExport) { - SvStream& rStream = *rExport.pTableStrm; + SvStream& rStream = *rExport.m_pTableStrm; rStream.WriteUInt16(m_nId); rStream.WriteUInt16(m_aProperties.size()); rStream.WriteUInt16(0); // cbUnknown @@ -6965,7 +6955,10 @@ WW8Style::WW8Style(SvStream& rStream, WW8Fib& rFibPara) std::unique_ptr<WW8_STD> WW8Style::Read1STDFixed(sal_uInt16& rSkip) { if (m_rStream.remainingSize() < 2) + { + rSkip = 0; return nullptr; + } std::unique_ptr<WW8_STD> pStd; @@ -7205,16 +7198,17 @@ namespace return true; } - sal_Int32 getStringLength( - sal_uInt8 const * p, std::size_t offset, sal_uInt8 const * pEnd) + sal_Int32 getStringLengthWithMax( + sal_uInt8 const * p, std::size_t offset, sal_uInt8 const * pEnd, std::size_t maxchars) { assert(p <= pEnd); assert(pEnd - p <= SAL_MAX_INT32); if (offset >= o3tl::make_unsigned(pEnd - p)) { return -1; } - void const * p2 = std::memchr( - p + offset, 0, static_cast<std::size_t>(pEnd - p) - offset); + std::size_t nbytes = static_cast<std::size_t>(pEnd - p) - offset; + std::size_t nsearch = std::min(nbytes, maxchars + 1); + void const * p2 = std::memchr(p + offset, 0, nsearch); if (p2 == nullptr) { return -1; } @@ -7313,12 +7307,13 @@ WW8Fonts::WW8Fonts( SvStream& rSt, WW8Fib const & rFib ) if ((eEnc == RTL_TEXTENCODING_SYMBOL) || (eEnc == RTL_TEXTENCODING_DONTKNOW)) eEnc = RTL_TEXTENCODING_MS_1252; - sal_Int32 n = getStringLength(pVer2, 1 + 2, pEnd); + const size_t nStringOffset = 1 + 2; + sal_Int32 n = getStringLengthWithMax(pVer2, nStringOffset, pEnd, maxStrSize); if (n == -1) { break; } p->sFontname = OUString( - reinterpret_cast<char const *>(pVer2 + 1 + 2), n, eEnc); + reinterpret_cast<char const *>(pVer2 + nStringOffset), n, eEnc); pVer2 = pVer2 + p->aFFNBase.cbFfnM1 + 1; } nMax = i; @@ -7364,26 +7359,20 @@ WW8Fonts::WW8Fonts( SvStream& rSt, WW8Fib const & rFib ) rtl_TextEncoding eEnc = WW8Fib::GetFIBCharset(p->aFFNBase.chs, rFib.m_lid); if ((eEnc == RTL_TEXTENCODING_SYMBOL) || (eEnc == RTL_TEXTENCODING_DONTKNOW)) eEnc = RTL_TEXTENCODING_MS_1252; - sal_Int32 n = getStringLength( - pVer6, offsetof(WW8_FFN_Ver6, szFfn), pEnd); + const size_t nStringOffset = offsetof(WW8_FFN_Ver6, szFfn); + sal_Int32 n = getStringLengthWithMax(pVer6, nStringOffset, pEnd, maxStrSize); if (n == -1) { break; } - p->sFontname = OUString( - reinterpret_cast<char const *>( - pVer6 + offsetof(WW8_FFN_Ver6, szFfn)), - n, eEnc); + p->sFontname = OUString(reinterpret_cast<char const*>(pVer6 + nStringOffset), n, eEnc); if (p->aFFNBase.ibszAlt && p->aFFNBase.ibszAlt < maxStrSize) //don't start after end of string { - n = getStringLength( - pVer6, offsetof(WW8_FFN_Ver6, szFfn) + p->aFFNBase.ibszAlt, - pEnd); + const size_t nAltStringOffset = offsetof(WW8_FFN_Ver6, szFfn) + p->aFFNBase.ibszAlt; + n = getStringLengthWithMax(pVer6, nAltStringOffset, pEnd, maxStrSize); if (n == -1) { break; } - p->sFontname += ";" + OUString( - reinterpret_cast<char const *>( - pVer6 + offsetof(WW8_FFN_Ver6, szFfn) + p->aFFNBase.ibszAlt), + p->sFontname += ";" + OUString(reinterpret_cast<char const*>(pVer6 + nAltStringOffset), n, eEnc); } else @@ -7505,9 +7494,9 @@ const WW8_FFN* WW8Fonts::GetFont( sal_uInt16 nNum ) const // -> maybe we can get a right result then WW8PLCF_HdFt::WW8PLCF_HdFt( SvStream* pSt, WW8Fib const & rFib, WW8Dop const & rDop ) - : aPLCF(*pSt, rFib.m_fcPlcfhdd , rFib.m_lcbPlcfhdd , 0) + : m_aPLCF(*pSt, rFib.m_fcPlcfhdd , rFib.m_lcbPlcfhdd , 0) { - nIdxOffset = 0; + m_nIdxOffset = 0; /* This dop.grpfIhdt has a bit set for each special @@ -7523,14 +7512,14 @@ WW8PLCF_HdFt::WW8PLCF_HdFt( SvStream* pSt, WW8Fib const & rFib, WW8Dop const & r */ for( sal_uInt8 nI = 0x1; nI <= 0x20; nI <<= 1 ) if( nI & rDop.grpfIhdt ) // bit set? - nIdxOffset++; + m_nIdxOffset++; } bool WW8PLCF_HdFt::GetTextPos(sal_uInt8 grpfIhdt, sal_uInt8 nWhich, WW8_CP& rStart, WW8_CP& rLen) { sal_uInt8 nI = 0x01; - short nIdx = nIdxOffset; + short nIdx = m_nIdxOffset; while (true) { if( nI & nWhich ) @@ -7545,8 +7534,8 @@ bool WW8PLCF_HdFt::GetTextPos(sal_uInt8 grpfIhdt, sal_uInt8 nWhich, WW8_CP& rSta WW8_CP nEnd; void* pData; - aPLCF.SetIdx( nIdx ); // Lookup suitable CP - aPLCF.Get( rStart, nEnd, pData ); + m_aPLCF.SetIdx( nIdx ); // Lookup suitable CP + m_aPLCF.Get( rStart, nEnd, pData ); if (nEnd < rStart) { SAL_WARN("sw.ww8", "End " << nEnd << " before Start " << rStart); @@ -7560,7 +7549,7 @@ bool WW8PLCF_HdFt::GetTextPos(sal_uInt8 grpfIhdt, sal_uInt8 nWhich, WW8_CP& rSta return false; } - aPLCF.advance(); + m_aPLCF.advance(); return true; } @@ -7570,8 +7559,8 @@ void WW8PLCF_HdFt::GetTextPosExact(short nIdx, WW8_CP& rStart, WW8_CP& rLen) WW8_CP nEnd; void* pData; - aPLCF.SetIdx( nIdx ); // Lookup suitable CP - aPLCF.Get( rStart, nEnd, pData ); + m_aPLCF.SetIdx( nIdx ); // Lookup suitable CP + m_aPLCF.Get( rStart, nEnd, pData ); if (nEnd < rStart) { SAL_WARN("sw.ww8", "End " << nEnd << " before Start " << rStart); @@ -7590,7 +7579,7 @@ void WW8PLCF_HdFt::UpdateIndex( sal_uInt8 grpfIhdt ) // Caution: Description is not correct for( sal_uInt8 nI = 0x01; nI <= 0x20; nI <<= 1 ) if( nI & grpfIhdt ) - nIdxOffset++; + m_nIdxOffset++; } WW8Dop::WW8Dop(SvStream& rSt, sal_Int16 nFib, sal_Int32 nPos, sal_uInt32 nSize): @@ -7629,7 +7618,7 @@ WW8Dop::WW8Dop(SvStream& rSt, sal_Int16 nFib, sal_Int32 nPos, sal_uInt32 nSize): fCompatibilityOptions_Unknown2_5(false), fCompatibilityOptions_Unknown2_6(false), fCompatibilityOptions_Unknown2_7(false), fCompatibilityOptions_Unknown2_8(false), fCompatibilityOptions_Unknown2_9(false), fCompatibilityOptions_Unknown2_10(false), - fCompatibilityOptions_Unknown2_11(false), fCompatibilityOptions_Unknown2_12(false), + fDontBreakWrappedTables(false), fCompatibilityOptions_Unknown2_12(false), fCompatibilityOptions_Unknown2_13(false), fCompatibilityOptions_Unknown2_14(false), fCompatibilityOptions_Unknown2_15(false), fCompatibilityOptions_Unknown2_16(false), fCompatibilityOptions_Unknown2_17(false), fCompatibilityOptions_Unknown2_18(false), @@ -7900,7 +7889,7 @@ WW8Dop::WW8Dop(): fCompatibilityOptions_Unknown2_5(false), fCompatibilityOptions_Unknown2_6(false), fCompatibilityOptions_Unknown2_7(false), fCompatibilityOptions_Unknown2_8(false), fCompatibilityOptions_Unknown2_9(false), fCompatibilityOptions_Unknown2_10(false), - fCompatibilityOptions_Unknown2_11(false), fCompatibilityOptions_Unknown2_12(false), + fDontBreakWrappedTables(false), fCompatibilityOptions_Unknown2_12(false), fCompatibilityOptions_Unknown2_13(false), fCompatibilityOptions_Unknown2_14(false), fCompatibilityOptions_Unknown2_15(false), fCompatibilityOptions_Unknown2_16(false), fCompatibilityOptions_Unknown2_17(false), fCompatibilityOptions_Unknown2_18(false), @@ -8017,7 +8006,7 @@ void WW8Dop::SetCompatibilityOptions2(sal_uInt32 a32Bit) fCompatibilityOptions_Unknown2_8 = ( a32Bit & 0x00000080 ) >> 7 ; fCompatibilityOptions_Unknown2_9 = ( a32Bit & 0x00000100 ) >> 8 ; fCompatibilityOptions_Unknown2_10 = ( a32Bit & 0x00000200 ) >> 9 ; - fCompatibilityOptions_Unknown2_11 = ( a32Bit & 0x00000400 ) >> 10 ; + fDontBreakWrappedTables = ( a32Bit & 0x00000400 ) >> 10 ; fCompatibilityOptions_Unknown2_12 = ( a32Bit & 0x00000800 ) >> 11 ; fCompatibilityOptions_Unknown2_13 = ( a32Bit & 0x00001000 ) >> 12 ; fCompatibilityOptions_Unknown2_14 = ( a32Bit & 0x00002000 ) >> 13 ; @@ -8054,7 +8043,7 @@ sal_uInt32 WW8Dop::GetCompatibilityOptions2() const if (fCompatibilityOptions_Unknown2_8) a32Bit |= 0x00000080; if (fCompatibilityOptions_Unknown2_9) a32Bit |= 0x00000100; if (fCompatibilityOptions_Unknown2_10) a32Bit |= 0x00000200; - if (fCompatibilityOptions_Unknown2_11) a32Bit |= 0x00000400; + if (fDontBreakWrappedTables) a32Bit |= 0x00000400; if (fCompatibilityOptions_Unknown2_12) a32Bit |= 0x00000800; if (fCompatibilityOptions_Unknown2_13) a32Bit |= 0x00001000; //#i42909# set thai "line breaking rules" compatibility option @@ -8406,18 +8395,6 @@ sal_uInt16 wwSprmParser::GetSprmTailLen(sal_uInt16 nId, const sal_uInt8* pSprm, nL = 2 + 4 * nDel + 3 * nIns; } break; - case 0xD608: - { - sal_uInt8 nIndex = 1 + mnDelta; - if (nIndex + 1 >= nRemLen) - { - SAL_WARN("sw.ww8", "sprm longer than remaining bytes, doc or parser is wrong"); - nL = 0; - } - else - nL = SVBT16ToUInt16(&pSprm[nIndex]); - break; - } default: switch (aSprm.nVari) { @@ -8425,14 +8402,16 @@ sal_uInt16 wwSprmParser::GetSprmTailLen(sal_uInt16 nId, const sal_uInt8* pSprm, nL = aSprm.nLen; // Excl. Token break; case L_VAR: - // Variable 1-Byte Length? - // Excl. Token + Var-Lengthbyte + // Variable 1-Byte Length + // parameter length (i.e. excluding token and length byte) nL = static_cast< sal_uInt16 >(pSprm[1 + mnDelta] + aSprm.nLen); break; case L_VAR2: { - // Variable 2-Byte Length? - // Excl. Token + Var-Lengthbyte + // Variable 2-Byte Length + // For sprmTDefTable and sprmTDefTable10, the length of the + // parameter plus 1 is recorded in the two bytes beginning + // at offset (WW7-) 1 or (WW8+) 2 sal_uInt8 nIndex = 1 + mnDelta; sal_uInt16 nCount; if (nIndex + 1 >= nRemLen) @@ -8441,8 +8420,13 @@ sal_uInt16 wwSprmParser::GetSprmTailLen(sal_uInt16 nId, const sal_uInt8* pSprm, nCount = 0; } else + { nCount = SVBT16ToUInt16(&pSprm[nIndex]); - nL = static_cast< sal_uInt16 >(nCount + aSprm.nLen - 1); + SAL_WARN_IF(nCount < 1, "sw.ww8", "length should have been at least 1"); + if (nCount) + --nCount; + } + nL = static_cast<sal_uInt16>(nCount + aSprm.nLen); break; } default: |