From 1e7c85d310310deca2895d2665b6e53bceca919c Mon Sep 17 00:00:00 2001 From: Elena Subbotina Date: Sat, 12 Nov 2022 17:10:25 +0300 Subject: [PATCH] fix bug #59692 --- .../DocxFormat/Source/DocxFormat/Document.cpp | 108 +++++++++--------- .../Source/DocxFormat/Logic/Paragraph.cpp | 98 ++++++++-------- .../DocxFormat/Logic/ParagraphProperty.cpp | 88 +++++++------- .../Source/DocxFormat/Logic/Run.cpp | 86 +++++++------- OfficeCryptReader/Test/Test.vcxproj | 2 + OfficeCryptReader/Test/Test.vcxproj.filters | 3 + OfficeCryptReader/source/CryptTransform.cpp | 9 +- 7 files changed, 201 insertions(+), 193 deletions(-) diff --git a/Common/DocxFormat/Source/DocxFormat/Document.cpp b/Common/DocxFormat/Source/DocxFormat/Document.cpp index 47c04f05e2..1b00674534 100644 --- a/Common/DocxFormat/Source/DocxFormat/Document.cpp +++ b/Common/DocxFormat/Source/DocxFormat/Document.cpp @@ -53,14 +53,14 @@ namespace OOX int nCurDepth = oReader.GetDepth(); while (oReader.ReadNextSiblingNode(nCurDepth)) { - std::wstring sName = oReader.GetName(); + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if (L"w:drawing" == sName) + if (L"drawing" == sName) { m_oDrawing = new OOX::Logic::CDrawing(m_pMainDocument); m_oDrawing->fromXML(oReader); } - else if (L"v:background" == sName) + else if (L"background" == sName) { m_oBackground = OOX::Vml::CBackground(m_pMainDocument); m_oBackground->fromXML(oReader); @@ -133,24 +133,24 @@ namespace OOX int nCurDepth = oReader.GetDepth(); while (oReader.ReadNextSiblingNode(nCurDepth)) { - std::wstring sName = oReader.GetName(); + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if (L"w:background" == sName) + if (L"background" == sName) { ReadAttributes(oReader); } - else if (L"v:background" == sName) + else if (L"background" == sName) m_oBackground = oReader; - else if (L"w:binData" == sName) + else if (L"binData" == sName) m_oBinData = oReader; } } void CBgPict::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) { - WritingElement_ReadAttributes_Start(oReader) - WritingElement_ReadAttributes_Read_if(oReader, L"w:bgcolor", m_oColor) - WritingElement_ReadAttributes_Read_else_if(oReader, L"w:background", m_oBackgroundType) - WritingElement_ReadAttributes_End(oReader) + WritingElement_ReadAttributes_Start_No_NS(oReader) + WritingElement_ReadAttributes_Read_if(oReader, L"bgcolor", m_oColor) + WritingElement_ReadAttributes_Read_else_if(oReader, L"background", m_oBackgroundType) + WritingElement_ReadAttributes_End_No_NS(oReader) } } //------------------------------------------------------------------------------------------------------------------------ @@ -234,69 +234,69 @@ namespace OOX while ( oReader.ReadNextSiblingNode( Depth ) ) { - std::wstring sName = oReader.GetName(); + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); WritingElement *pItem = NULL; - if (L"w:altChunk" == sName ) + if (L"altChunk" == sName ) pItem = new Logic::CAltChunk( document ); - else if (L"w:bookmarkEnd" == sName ) + else if (L"bookmarkEnd" == sName ) pItem = new Logic::CBookmarkEnd( document ); - else if (L"w:bookmarkStart" == sName ) + else if (L"bookmarkStart" == sName ) pItem = new Logic::CBookmarkStart( document ); - else if (L"w:commentRangeEnd" == sName ) + else if (L"commentRangeEnd" == sName ) pItem = new Logic::CCommentRangeEnd( document ); - else if (L"w:commentRangeStart" == sName ) + else if (L"commentRangeStart" == sName ) pItem = new Logic::CCommentRangeStart( document ); - //else if (L"w:customXml" == sName ) + //else if (L"customXml" == sName ) // pItem = new Logic::CCustomXml( document ); - else if (L"w:customXmlDelRangeEnd" == sName ) + else if (L"customXmlDelRangeEnd" == sName ) pItem = new Logic::CCustomXmlDelRangeEnd( document ); - else if (L"w:customXmlDelRangeStart" == sName ) + else if (L"customXmlDelRangeStart" == sName ) pItem = new Logic::CCustomXmlDelRangeStart( document ); - else if (L"w:customXmlInsRangeEnd" == sName ) + else if (L"customXmlInsRangeEnd" == sName ) pItem = new Logic::CCustomXmlInsRangeEnd( document ); - else if (L"w:customXmlInsRangeStart" == sName ) + else if (L"customXmlInsRangeStart" == sName ) pItem = new Logic::CCustomXmlInsRangeStart( document ); - else if (L"w:customXmlMoveFromRangeEnd" == sName ) + else if (L"customXmlMoveFromRangeEnd" == sName ) pItem = new Logic::CCustomXmlMoveFromRangeEnd( document ); - else if (L"w:customXmlMoveFromRangeStart" == sName ) + else if (L"customXmlMoveFromRangeStart" == sName ) pItem = new Logic::CCustomXmlMoveFromRangeStart( document ); - else if (L"w:customXmlMoveToRangeEnd" == sName ) + else if (L"customXmlMoveToRangeEnd" == sName ) pItem = new Logic::CCustomXmlMoveToRangeEnd( document ); - else if (L"w:customXmlMoveToRangeStart" == sName ) + else if (L"customXmlMoveToRangeStart" == sName ) pItem = new Logic::CCustomXmlMoveToRangeStart( document ); - else if (L"w:del" == sName ) + else if (L"del" == sName ) pItem = new Logic::CDel( document ); - else if (L"w:ins" == sName ) + else if (L"ins" == sName ) pItem = new Logic::CIns( document ); - else if (L"w:moveFrom" == sName ) + else if (L"moveFrom" == sName ) pItem = new Logic::CMoveFrom( document ); - else if (L"w:moveFromRangeEnd" == sName ) + else if (L"moveFromRangeEnd" == sName ) pItem = new Logic::CMoveFromRangeEnd( document ); - else if (L"w:moveFromRangeStart" == sName ) + else if (L"moveFromRangeStart" == sName ) pItem = new Logic::CMoveFromRangeStart( document ); - else if (L"w:moveTo" == sName ) + else if (L"moveTo" == sName ) pItem = new Logic::CMoveTo( document ); - else if (L"w:moveToRangeEnd" == sName ) + else if (L"moveToRangeEnd" == sName ) pItem = new Logic::CMoveToRangeEnd( document ); - else if (L"w:moveToRangeStart" == sName ) + else if (L"moveToRangeStart" == sName ) pItem = new Logic::CMoveToRangeStart( document ); else if (L"m:oMath" == sName ) pItem = new Logic::COMath( document ); else if (L"m:oMathPara" == sName ) pItem = new Logic::COMathPara( document ); - else if (L"w:p" == sName ) + else if (L"p" == sName ) pItem = new Logic::CParagraph( document ); - else if (L"w:permEnd" == sName ) + else if (L"permEnd" == sName ) pItem = new Logic::CPermEnd( document ); - else if (L"w:permStart" == sName ) + else if (L"permStart" == sName ) pItem = new Logic::CPermStart( document ); - else if (L"w:proofErr" == sName ) + else if (L"proofErr" == sName ) pItem = new Logic::CProofErr( document ); - else if (L"w:sdt" == sName ) + else if (L"sdt" == sName ) pItem = new Logic::CSdt( document ); - else if (L"w:sectPr" == sName ) + else if (L"sectPr" == sName ) { m_oSectPr = new Logic::CSectionProperty( document ); m_oSectPr->fromXML(oReader); @@ -314,34 +314,34 @@ namespace OOX } //------------------------------------------------------------------------- } - else if (L"w:tbl" == sName ) + else if (L"tbl" == sName ) pItem = new Logic::CTbl( document ); - else if (L"w:body" == sName && !oReader.IsEmptyNode()) + else if (L"body" == sName && !oReader.IsEmptyNode()) { int nWBodyDepth = oReader.GetDepth(); CreateElements(oReader, nWBodyDepth); } - else if (L"wx:sect" == sName && !oReader.IsEmptyNode()) + else if (L"sect" == sName && !oReader.IsEmptyNode()) { int nWxSectDepth = oReader.GetDepth(); CreateElements(oReader, nWxSectDepth); } - else if (L"wx:sub-section" == sName && !oReader.IsEmptyNode()) + else if (L"sub-section" == sName && !oReader.IsEmptyNode()) { int nWxSubSectDepth = oReader.GetDepth(); CreateElements(oReader, nWxSubSectDepth); } - else if (L"wx:pBdrGroup" == sName && !oReader.IsEmptyNode()) + else if (L"pBdrGroup" == sName && !oReader.IsEmptyNode()) { int nWxBdrGroupDepth = oReader.GetDepth(); CreateElements(oReader, nWxBdrGroupDepth); } - else if (L"w:background" == sName) + else if (L"background" == sName) { m_oBackground = new OOX::Logic::CBackground(WritingElement::m_pMainDocument); m_oBackground->fromXML(oReader); } - else if (L"w:docParts" == sName && !oReader.IsEmptyNode()) + else if (L"docParts" == sName && !oReader.IsEmptyNode()) { WritingElement *pItem = new OOX::Logic::CDocParts(WritingElement::m_pMainDocument); m_arrItems.push_back(pItem); @@ -375,8 +375,8 @@ namespace OOX if ( !oReader.ReadNextNode() ) return; - std::wstring sName = oReader.GetName(); - if ( L"w:document" == sName || L"w:wordDocument" == sName || L"w:glossaryDocument" == sName) + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( L"document" == sName || L"wordDocument" == sName || L"glossaryDocument" == sName) { fromXML(oReader); } @@ -406,10 +406,10 @@ namespace OOX void CDocument::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, L"w:conformance", m_oConformance ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"xml:space", m_oSpace ) - WritingElement_ReadAttributes_End( oReader ) + WritingElement_ReadAttributes_Start_No_NS( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, L"conformance", m_oConformance ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"space", m_oSpace ) + WritingElement_ReadAttributes_End_No_NS( oReader ) } void CDocument::fromXML(XmlUtils::CXmlLiteReader& oReader) { @@ -419,7 +419,7 @@ namespace OOX return; int nDocumentDepth = oReader.GetDepth(); - std::wstring sName = oReader.GetName(); + //std::wstring sName = oReader.GetName(); CreateElements(oReader, nDocumentDepth); } diff --git a/Common/DocxFormat/Source/DocxFormat/Logic/Paragraph.cpp b/Common/DocxFormat/Source/DocxFormat/Logic/Paragraph.cpp index 8537743246..2549669073 100644 --- a/Common/DocxFormat/Source/DocxFormat/Logic/Paragraph.cpp +++ b/Common/DocxFormat/Source/DocxFormat/Logic/Paragraph.cpp @@ -194,20 +194,20 @@ namespace OOX while( oReader.ReadNextSiblingNode(nDepth) ) { - std::wstring sName = oReader.GetName(); + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); WritingElement *pItem = NULL; - if (L"w:bdo" == sName ) + if (L"bdo" == sName ) pItem = new CBdo( document ); - else if (L"w:bookmarkEnd" == sName ) + else if (L"bookmarkEnd" == sName ) pItem = new CBookmarkEnd( document ); - else if (L"w:bookmarkStart" == sName ) + else if (L"bookmarkStart" == sName ) pItem = new CBookmarkStart( document ); - else if (L"w:commentRangeEnd" == sName ) + else if (L"commentRangeEnd" == sName ) pItem = new CCommentRangeEnd( document ); - else if (L"w:commentRangeStart" == sName ) + else if (L"commentRangeStart" == sName ) pItem = new CCommentRangeStart( document ); - else if ( L"aml:annotation" == sName) //Bookmark + else if ( L"annotation" == sName) //Bookmark { nullable_string sType; WritingElement_ReadAttributes_ReadSingle2(oReader, L"w:type", sType); @@ -238,55 +238,55 @@ namespace OOX } } } - //else if (L"w:customXml" == sName ) + //else if (L"customXml" == sName ) // pItem = new CCustomXml( document ); - else if (L"w:customXmlDelRangeEnd" == sName ) + else if (L"customXmlDelRangeEnd" == sName ) pItem = new CCustomXmlDelRangeEnd( document ); - else if (L"w:customXmlDelRangeStart" == sName ) + else if (L"customXmlDelRangeStart" == sName ) pItem = new CCustomXmlDelRangeStart( document ); - else if (L"w:customXmlInsRangeEnd" == sName ) + else if (L"customXmlInsRangeEnd" == sName ) pItem = new CCustomXmlInsRangeEnd( document ); - else if (L"w:customXmlInsRangeStart" == sName ) + else if (L"customXmlInsRangeStart" == sName ) pItem = new CCustomXmlInsRangeStart( document ); - else if (L"w:customXmlMoveFromRangeEnd" == sName ) + else if (L"customXmlMoveFromRangeEnd" == sName ) pItem = new CCustomXmlMoveFromRangeEnd( document ); - else if (L"w:customXmlMoveFromRangeStart" == sName ) + else if (L"customXmlMoveFromRangeStart" == sName ) pItem = new CCustomXmlMoveFromRangeStart( document ); - else if (L"w:customXmlMoveToRangeEnd" == sName ) + else if (L"customXmlMoveToRangeEnd" == sName ) pItem = new CCustomXmlMoveToRangeEnd( document ); - else if (L"w:customXmlMoveToRangeStart" == sName ) + else if (L"customXmlMoveToRangeStart" == sName ) pItem = new CCustomXmlMoveToRangeStart( document ); - else if (L"w:del" == sName ) + else if (L"del" == sName ) pItem = new CDel( document ); - else if (L"w:dir" == sName ) + else if (L"dir" == sName ) pItem = new CDir( document ); - else if (L"w:fldSimple" == sName ) + else if (L"fldSimple" == sName ) pItem = new CFldSimple( document ); - else if (L"w:hyperlink" == sName ||L"w:hlink" == sName ) + else if (L"hyperlink" == sName ||L"hlink" == sName ) pItem = new CHyperlink( document ); - else if (L"w:ins" == sName ) + else if (L"ins" == sName ) pItem = new CIns( document ); - else if (L"w:moveFrom" == sName ) + else if (L"moveFrom" == sName ) pItem = new CMoveFrom( document ); - else if (L"w:moveFromRangeEnd" == sName ) + else if (L"moveFromRangeEnd" == sName ) pItem = new CMoveFromRangeEnd( document ); - else if (L"w:moveFromRangeStart" == sName ) + else if (L"moveFromRangeStart" == sName ) pItem = new CMoveFromRangeStart( document ); - else if (L"w:moveTo" == sName ) + else if (L"moveTo" == sName ) pItem = new CMoveTo( document ); - else if (L"w:moveToRangeEnd" == sName ) + else if (L"moveToRangeEnd" == sName ) pItem = new CMoveToRangeEnd( document ); - else if (L"w:moveToRangeStart" == sName ) + else if (L"moveToRangeStart" == sName ) pItem = new CMoveToRangeStart( document ); - else if (L"m:oMath" == sName ) + else if (L"oMath" == sName ) pItem = new COMath( document ); - else if (L"m:oMathPara" == sName ) + else if (L"oMathPara" == sName ) pItem = new COMathPara( document ); - else if (L"w:permEnd" == sName ) + else if (L"permEnd" == sName ) pItem = new CPermEnd( document ); - else if (L"w:permStart" == sName ) + else if (L"permStart" == sName ) pItem = new CPermStart( document ); - else if (L"w:pPr" == sName ) + else if (L"pPr" == sName ) {// c копией .. для быстрого доступа/анализа if (m_oParagraphProperty) { @@ -304,27 +304,27 @@ namespace OOX pItem = m_oParagraphProperty = new CParagraphProperty( document ); } } - else if (L"w:proofErr" == sName ) + else if (L"proofErr" == sName ) pItem = new CProofErr( document ); - else if (L"w:r" == sName ) + else if (L"r" == sName ) pItem = new CRun( document ); - else if (L"w:sdt" == sName ) + else if (L"sdt" == sName ) pItem = new CSdt( document ); - else if (L"w:smartTag" == sName ) + else if (L"smartTag" == sName ) pItem = new CSmartTag( document ); - //else if (L"w:subDoc" == sName ) + //else if (L"subDoc" == sName ) // pItem = new CSubDoc( document ); - else if (L"w:sdtContent" == sName) + else if (L"sdtContent" == sName) { int nDepthChild = oReader.GetDepth(); fromXML(nDepthChild, oReader); } - else if (L"wx:sect" == sName && !oReader.IsEmptyNode()) + else if (L"sect" == sName && !oReader.IsEmptyNode()) { int nWxSectDepth = oReader.GetDepth(); fromXML(nWxSectDepth, oReader); } - else if (L"wx:sub-section" == sName && !oReader.IsEmptyNode()) + else if (L"sub-section" == sName && !oReader.IsEmptyNode()) { int nWxSubSectDepth = oReader.GetDepth(); fromXML(nWxSubSectDepth, oReader); @@ -372,17 +372,17 @@ namespace OOX void CParagraph::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) { - WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Start_No_NS( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader,L"w:rsidDel", m_oRsidDel ) - WritingElement_ReadAttributes_Read_else_if( oReader,L"w:rsidP", m_oRsidP ) - WritingElement_ReadAttributes_Read_else_if( oReader,L"w:rsidR", m_oRsidR ) - WritingElement_ReadAttributes_Read_else_if( oReader,L"w:rsidRDefault", m_oRsidRDefault ) - WritingElement_ReadAttributes_Read_else_if( oReader,L"w:rsidRPr", m_oRsidRPr ) - WritingElement_ReadAttributes_Read_else_if( oReader,L"w14:paraId", m_oParaId ) - WritingElement_ReadAttributes_Read_else_if( oReader,L"w14:textId", m_oTextId ) + WritingElement_ReadAttributes_Read_if ( oReader,L"rsidDel", m_oRsidDel ) + WritingElement_ReadAttributes_Read_else_if( oReader,L"rsidP", m_oRsidP ) + WritingElement_ReadAttributes_Read_else_if( oReader,L"rsidR", m_oRsidR ) + WritingElement_ReadAttributes_Read_else_if( oReader,L"rsidRDefault", m_oRsidRDefault ) + WritingElement_ReadAttributes_Read_else_if( oReader,L"rsidRPr", m_oRsidRPr ) + WritingElement_ReadAttributes_Read_else_if( oReader,L"paraId", m_oParaId ) + WritingElement_ReadAttributes_Read_else_if( oReader,L"textId", m_oTextId ) - WritingElement_ReadAttributes_End( oReader ) + WritingElement_ReadAttributes_End_No_NS( oReader ) } void CParagraph::AddRun(CRun *pRun) { diff --git a/Common/DocxFormat/Source/DocxFormat/Logic/ParagraphProperty.cpp b/Common/DocxFormat/Source/DocxFormat/Logic/ParagraphProperty.cpp index 6a16599313..8860b3e984 100644 --- a/Common/DocxFormat/Source/DocxFormat/Logic/ParagraphProperty.cpp +++ b/Common/DocxFormat/Source/DocxFormat/Logic/ParagraphProperty.cpp @@ -98,8 +98,8 @@ namespace OOX int nParentDepth = oReader.GetDepth(); while( oReader.ReadNextSiblingNode( nParentDepth ) ) { - std::wstring sName = oReader.GetName(); - if ( L"w:pPr" == sName ) + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( L"pPr" == sName ) m_pParPr->fromXML( oReader ); } } @@ -151,12 +151,12 @@ namespace OOX } void CPPrChange::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, L"w:author", m_sAuthor ) - WritingElement_ReadAttributes_Read_else_if( oReader, L"w:date", m_oDate ) - WritingElement_ReadAttributes_Read_else_if( oReader, L"w:id", m_oId ) + WritingElement_ReadAttributes_Start_No_NS( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, L"author", m_sAuthor ) + WritingElement_ReadAttributes_Read_else_if( oReader, L"date", m_oDate ) + WritingElement_ReadAttributes_Read_else_if( oReader, L"id", m_oId ) WritingElement_ReadAttributes_Read_else_if( oReader, L"oouserid", m_sUserId ) - WritingElement_ReadAttributes_End( oReader ) + WritingElement_ReadAttributes_End_No_NS( oReader ) } void CParagraphProperty::fromXML(XmlUtils::CXmlNode& oNode) {//??? где используется ? @@ -225,53 +225,53 @@ namespace OOX int nParentDepth = oReader.GetDepth(); while( oReader.ReadNextSiblingNode( nParentDepth ) ) { - std::wstring sName = oReader.GetName(); + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if ( L"w:adjustRightInd" == sName ) + if ( L"adjustRightInd" == sName ) m_oAdjustRightInd = oReader; - else if ( L"w:autoSpaceDE" == sName ) + else if ( L"autoSpaceDE" == sName ) m_oAutoSpaceDE = oReader; - else if ( L"w:autoSpaceDN" == sName ) + else if ( L"autoSpaceDN" == sName ) m_oAutoSpaceDN = oReader; - else if ( L"w:bidi" == sName ) + else if ( L"bidi" == sName ) m_oBidi = oReader; - else if ( L"w:cnfStyle" == sName ) + else if ( L"cnfStyle" == sName ) m_oCnfStyle = oReader; - else if ( L"w:contextualSpacing" == sName ) + else if ( L"contextualSpacing" == sName ) m_oContextualSpacing = oReader; - else if ( L"w:divId" == sName ) + else if ( L"divId" == sName ) m_oDivID = oReader; - else if ( L"w:framePr" == sName ) + else if ( L"framePr" == sName ) m_oFramePr = oReader; - else if ( L"w:ind" == sName ) + else if ( L"ind" == sName ) m_oInd = oReader; - else if ( L"w:jc" == sName ) + else if ( L"jc" == sName ) m_oJc = oReader; - else if ( L"w:keepLines" == sName ) + else if ( L"keepLines" == sName ) m_oKeepLines = oReader; - else if ( L"w:keepNext" == sName ) + else if ( L"keepNext" == sName ) m_oKeepNext = oReader; - else if ( L"w:kinsoku" == sName ) + else if ( L"kinsoku" == sName ) m_oKinsoku = oReader; - else if ( L"w:mirrorIndents" == sName ) + else if ( L"mirrorIndents" == sName ) m_oMirrorIndents = oReader; - else if ( L"w:numPr" == sName || L"w:listPr" == sName) + else if ( L"numPr" == sName || L"listPr" == sName) m_oNumPr = oReader; - else if ( L"w:outlineLvl" == sName ) + else if ( L"outlineLvl" == sName ) m_oOutlineLvl = oReader; - else if ( L"w:overflowPunct" == sName ) + else if ( L"overflowPunct" == sName ) m_oOverflowPunct = oReader; - else if ( L"w:pageBreakBefore" == sName ) + else if ( L"pageBreakBefore" == sName ) m_oPageBreakBefore = oReader; - else if ( L"w:pBdr" == sName ) + else if ( L"pBdr" == sName ) m_oPBdr = oReader; - else if ( !m_bPPrChange && L"w:pPrChange" == sName ) + else if ( !m_bPPrChange && L"pPrChange" == sName ) m_oPPrChange = oReader; - else if ( L"w:pStyle" == sName ) + else if ( L"pStyle" == sName ) m_oPStyle = oReader; - else if ( !m_bPPrChange && L"w:rPr" == sName ) + else if ( !m_bPPrChange && L"rPr" == sName ) m_oRPr = oReader; - else if ( !m_bPPrChange && L"w:sectPr" == sName ) + else if ( !m_bPPrChange && L"sectPr" == sName ) { m_oSectPr = new CSectionProperty(document); m_oSectPr->fromXML(oReader); @@ -293,31 +293,31 @@ namespace OOX } //------------------------------------------------------------------------------------ } - else if ( L"w:shd" == sName ) + else if ( L"shd" == sName ) m_oShd = oReader; - else if ( L"w:snapToGrid" == sName ) + else if ( L"snapToGrid" == sName ) m_oSnapToGrid = oReader; - else if ( L"w:spacing" == sName ) + else if ( L"spacing" == sName ) m_oSpacing = oReader; - else if ( L"w:suppressAutoHyphens" == sName ) + else if ( L"suppressAutoHyphens" == sName ) m_oSuppressAutoHyphens = oReader; - else if ( L"w:suppressLineNumbers" == sName ) + else if ( L"suppressLineNumbers" == sName ) m_oSuppressLineNumbers = oReader; - else if ( L"w:suppressOverlap" == sName ) + else if ( L"suppressOverlap" == sName ) m_oSuppressOverlap = oReader; - else if ( L"w:tabs" == sName ) + else if ( L"tabs" == sName ) m_oTabs = oReader; - else if ( L"w:textAlignment" == sName ) + else if ( L"textAlignment" == sName ) m_oTextAlignment = oReader; - else if ( L"w:textboxTightWrap" == sName ) + else if ( L"textboxTightWrap" == sName ) m_oTextboxTightWrap = oReader; - else if ( L"w:textDirection" == sName ) + else if ( L"textDirection" == sName ) m_oTextDirection = oReader; - else if ( L"w:topLinePunct" == sName ) + else if ( L"topLinePunct" == sName ) m_oTopLinePunct = oReader; - else if ( L"w:widowControl" == sName ) + else if ( L"widowControl" == sName ) m_oWidowControl = oReader; - else if ( L"w:wordWrap" == sName ) + else if ( L"wordWrap" == sName ) m_oWordWrap = oReader; } } diff --git a/Common/DocxFormat/Source/DocxFormat/Logic/Run.cpp b/Common/DocxFormat/Source/DocxFormat/Logic/Run.cpp index 1077f86840..ded6df918c 100644 --- a/Common/DocxFormat/Source/DocxFormat/Logic/Run.cpp +++ b/Common/DocxFormat/Source/DocxFormat/Logic/Run.cpp @@ -215,36 +215,36 @@ namespace OOX WritingElement* CRun::fromXMLElem(XmlUtils::CXmlLiteReader& oReader) { - std::wstring sName = oReader.GetName(); + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); WritingElement *pItem = NULL; OOX::Document* document = WritingElement::m_pMainDocument; - if ( L"mc:AlternateContent" == sName ) + if ( L"AlternateContent" == sName ) pItem = new CAlternateContent( document ); - else if ( L"w:annotationRef" == sName ) + else if ( L"annotationRef" == sName ) pItem = new CAnnotationRef( document ); - else if ( L"w:br" == sName ) + else if ( L"br" == sName ) pItem = new CBr( document ); - else if ( L"w:commentReference" == sName ) + else if ( L"commentReference" == sName ) pItem = new CCommentReference( document ); - else if ( L"w:contentPart" == sName ) + else if ( L"contentPart" == sName ) pItem = new CContentPart( document ); - else if ( L"w:continuationSeparator" == sName ) + else if ( L"continuationSeparator" == sName ) pItem = new CContinuationSeparator( document ); - else if ( L"w:cr" == sName ) + else if ( L"cr" == sName ) pItem = new CCr( document ); - else if ( L"w:dayLong" == sName ) + else if ( L"dayLong" == sName ) pItem = new CDayLong( document ); - else if ( L"w:dayShort" == sName ) + else if ( L"dayShort" == sName ) pItem = new CDayShort( document ); - else if ( L"w:delInstrText" == sName ) + else if ( L"delInstrText" == sName ) pItem = new CDelInstrText( document ); - else if ( L"w:delText" == sName ) + else if ( L"delText" == sName ) pItem = new CDelText( document ); - else if ( L"w:drawing" == sName ) + else if ( L"drawing" == sName ) pItem = new CDrawing( document ); - else if ( L"w:endnote" == sName ) + else if ( L"endnote" == sName ) { CEndnoteReference *pEndRef = new CEndnoteReference(document); CFtnEdn *pEndnote = new CFtnEdn( document ); @@ -266,13 +266,13 @@ namespace OOX } pItem = pEndRef; } - else if ( L"w:endnoteRef" == sName ) + else if ( L"endnoteRef" == sName ) pItem = new CEndnoteRef( document ); - else if ( L"w:endnoteReference" == sName ) + else if ( L"endnoteReference" == sName ) pItem = new CEndnoteReference( document ); - else if ( L"w:fldChar" == sName ) + else if ( L"fldChar" == sName ) pItem = new CFldChar( document ); - else if ( L"w:footnote" == sName ) + else if ( L"footnote" == sName ) { CFootnoteReference *pFootRef = new CFootnoteReference(document); CFtnEdn *pFootnote = new CFtnEdn( document ); @@ -292,29 +292,29 @@ namespace OOX } pItem = pFootRef; } - else if ( L"w:footnoteRef" == sName ) + else if ( L"footnoteRef" == sName ) pItem = new CFootnoteRef( document ); - else if ( L"w:footnoteReference" == sName ) + else if ( L"footnoteReference" == sName ) pItem = new CFootnoteReference( document ); - else if ( L"w:instrText" == sName ) + else if ( L"instrText" == sName ) pItem = new CInstrText( document ); - else if ( L"w:lastRenderedPageBreak" == sName ) + else if ( L"lastRenderedPageBreak" == sName ) pItem = new CLastRenderedPageBreak( document ); - else if ( L"w:monthLong" == sName ) + else if ( L"monthLong" == sName ) pItem = new CMonthLong( document ); - else if ( L"w:monthShort" == sName ) + else if ( L"monthShort" == sName ) pItem = new CMonthShort( document ); - else if ( L"w:noBreakHyphen" == sName ) + else if ( L"noBreakHyphen" == sName ) pItem = new CNoBreakHyphen( document ); - else if ( L"w:object" == sName ) + else if ( L"object" == sName ) pItem = new CObject( document ); - else if ( L"w:pgNum" == sName ) + else if ( L"pgNum" == sName ) pItem = new CPgNum( document ); - else if ( L"w:pict" == sName ) + else if ( L"pict" == sName ) pItem = new CPicture( document ); - else if ( L"w:ptab" == sName ) + else if ( L"ptab" == sName ) pItem = new CPTab( document ); - else if ( L"w:rPr" == sName ) + else if ( L"rPr" == sName ) { if (m_oRunProperty) { @@ -331,23 +331,23 @@ namespace OOX } return pItem; } - else if ( L"w:ruby" == sName ) + else if ( L"ruby" == sName ) pItem = new CRuby( document ); - else if ( L"w:separator" == sName ) + else if ( L"separator" == sName ) pItem = new CSeparator( document ); - else if ( L"w:softHyphen" == sName ) + else if ( L"softHyphen" == sName ) pItem = new CSoftHyphen( document ); - else if ( L"w:sym" == sName ) + else if ( L"sym" == sName ) pItem = new CSym( document ); - else if ( L"w:t" == sName ) + else if ( L"t" == sName ) { fromXMLText(oReader); } - else if ( L"w:tab" == sName ) + else if ( L"tab" == sName ) pItem = new CTab( document ); - else if ( L"w:yearLong" == sName ) + else if ( L"yearLong" == sName ) pItem = new CYearLong( document ); - else if ( L"aml:annotation" == sName) //Bookmark + else if ( L"annotation" == sName) //Bookmark { nullable_string sType; WritingElement_ReadAttributes_ReadSingle2(oReader, L"w:type", sType); @@ -483,20 +483,20 @@ namespace OOX if ( !oReader.MoveToFirstAttribute() ) return; - std::wstring wsName = oReader.GetName(); + std::wstring wsName = XmlUtils::GetNameNoNS(oReader.GetName()); while( !wsName.empty() ) { - if ( L"w:rsidDel" == wsName ) + if ( L"rsidDel" == wsName ) m_oRsidDel = oReader.GetText(); - else if ( L"w:rsidR" == wsName ) + else if ( L"rsidR" == wsName ) m_oRsidR = oReader.GetText(); - else if ( L"w:rsidRPr" == wsName ) + else if ( L"rsidRPr" == wsName ) m_oRsidRPr = oReader.GetText(); if ( !oReader.MoveToNextAttribute() ) break; - wsName = oReader.GetName(); + wsName = XmlUtils::GetNameNoNS(oReader.GetName()); } oReader.MoveToElement(); diff --git a/OfficeCryptReader/Test/Test.vcxproj b/OfficeCryptReader/Test/Test.vcxproj index 1e048b9bfe..99a903ea7e 100644 --- a/OfficeCryptReader/Test/Test.vcxproj +++ b/OfficeCryptReader/Test/Test.vcxproj @@ -44,6 +44,7 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\ true + ..\..\Common\3dParty\boost\build\win_32\include;$(VC_IncludePath);$(WindowsSDK_IncludePath); $(SolutionDir)$(Configuration)\ @@ -90,6 +91,7 @@ + diff --git a/OfficeCryptReader/Test/Test.vcxproj.filters b/OfficeCryptReader/Test/Test.vcxproj.filters index ed07061765..975d1188fe 100644 --- a/OfficeCryptReader/Test/Test.vcxproj.filters +++ b/OfficeCryptReader/Test/Test.vcxproj.filters @@ -21,5 +21,8 @@ Common + + Common + \ No newline at end of file diff --git a/OfficeCryptReader/source/CryptTransform.cpp b/OfficeCryptReader/source/CryptTransform.cpp index bfc2334b83..2a0ac9d007 100644 --- a/OfficeCryptReader/source/CryptTransform.cpp +++ b/OfficeCryptReader/source/CryptTransform.cpp @@ -31,6 +31,7 @@ */ #include #include +#include #include "CryptTransform.h" @@ -52,7 +53,7 @@ #include "../../Common/3dParty/cryptopp/zdeflate.h" #include "../../Common/DocxFormat/Source/Base/unicode_util.h" -#include "../../Common/DocxFormat/Source/Base/Unit.h" +#include "../../Common/DocxFormat/Source/Base/Base.h" #include "../../DesktopEditor/common/File.h" static const unsigned char encrVerifierHashInputBlockKey[8] = { 0xfe, 0xa7, 0xd2, 0x76, 0x3b, 0x4b, 0x9e, 0x79 }; @@ -899,8 +900,10 @@ bool ECMAWriteProtect::VerifyWrike() wPasswordHash ^= (0x8000 | ('N' << 8) | 'K'); wPasswordHash ^= p.length(); - std::string sPasswordHash = XmlUtils::ToString(wPasswordHash, "%4.4X"); - + std::stringstream sstream; + sstream << boost::format("%4.4X") % wPasswordHash; + std::string sPasswordHash = sstream.str(); + return data.hashValue == sPasswordHash; } bool ECMAWriteProtect::Verify()