diff options
Diffstat (limited to 'packaging/0007-FIX-fix-No.1-missing-GetImplementedMDs.patch')
-rw-r--r-- | packaging/0007-FIX-fix-No.1-missing-GetImplementedMDs.patch | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/packaging/0007-FIX-fix-No.1-missing-GetImplementedMDs.patch b/packaging/0007-FIX-fix-No.1-missing-GetImplementedMDs.patch new file mode 100644 index 0000000000..8ea8b47380 --- /dev/null +++ b/packaging/0007-FIX-fix-No.1-missing-GetImplementedMDs.patch @@ -0,0 +1,59 @@ +From 959e95869f6897afd5c3d9ff25c07318170bfaec Mon Sep 17 00:00:00 2001 +From: Gleb Balykov <g.balykov@samsung.com> +Date: Wed, 11 Apr 2018 16:10:58 +0300 +Subject: [PATCH 07/32] FIX: fix No.1, missing GetImplementedMDs() + +--- + src/vm/methodtablebuilder.cpp | 6 ++++-- + src/vm/securitymeta.cpp | 11 +++++++++-- + 2 files changed, 13 insertions(+), 4 deletions(-) + +diff --git a/src/vm/methodtablebuilder.cpp b/src/vm/methodtablebuilder.cpp +index df31c4a..3162f7c 100644 +--- a/src/vm/methodtablebuilder.cpp ++++ b/src/vm/methodtablebuilder.cpp +@@ -11909,8 +11909,10 @@ void MethodTableBuilder::VerifyInheritanceSecurity() + MethodImpl *pMethodImpl = pMD->GetMethodImpl(); + for (DWORD iCurImpl = 0; iCurImpl < pMethodImpl->GetSize(); iCurImpl++) + { +- MethodDesc *pDeclMD = pMethodImpl->GetImplementedMDs()[iCurImpl]; +- _ASSERTE(pDeclMD != NULL); ++ RelativePointer<MethodDesc *> *pRelPtrForSlot = pMethodImpl->GetImpMDsNonNull(); ++ TADDR base = dac_cast<TADDR>(pRelPtrForSlot) + iCurImpl * sizeof(RelativePointer<MethodDesc *>); ++ MethodDesc *pDeclMD = RelativePointer<MethodDesc *>::GetValueAtPtr(base); ++ + // We deal with interfaces below, so don't duplicate work + if (!pDeclMD->IsInterface()) + { +diff --git a/src/vm/securitymeta.cpp b/src/vm/securitymeta.cpp +index 1374d9f..3f06f05 100644 +--- a/src/vm/securitymeta.cpp ++++ b/src/vm/securitymeta.cpp +@@ -771,7 +771,10 @@ MethodDesc *MethodSecurityDescriptor::MethodImplementationIterator::Current() + _ASSERTE(m_fMethodImplIterationBegun); + _ASSERTE(m_pMD->IsMethodImpl()); + _ASSERTE(m_iMethodImplIndex < m_pMD->GetMethodImpl()->GetSize()); +- return m_pMD->GetMethodImpl()->GetImplementedMDs()[m_iMethodImplIndex]; ++ ++ RelativePointer<MethodDesc *> *pRelPtrForSlot = m_pMD->GetMethodImpl()->GetImpMDsNonNull(); ++ TADDR base = dac_cast<TADDR>(pRelPtrForSlot) + m_iMethodImplIndex * sizeof(RelativePointer<MethodDesc *>); ++ return RelativePointer<MethodDesc *>::GetValueAtPtr(base); + } + } + +@@ -856,7 +859,11 @@ void MethodSecurityDescriptor::MethodImplementationIterator::Next() + if (m_iMethodImplIndex < pMethodImpl->GetSize()) + { + // Skip over the interface MethodImpls since we already processed those +- fFoundImpl = !pMethodImpl->GetImplementedMDs()[m_iMethodImplIndex]->IsInterface(); ++ RelativePointer<MethodDesc *> *pRelPtrForSlot = pMethodImpl->GetImpMDsNonNull(); ++ TADDR base = dac_cast<TADDR>(pRelPtrForSlot) + m_iMethodImplIndex * sizeof(RelativePointer<MethodDesc *>); ++ MethodDesc *pDeclMD = RelativePointer<MethodDesc *>::GetValueAtPtr(base); ++ ++ fFoundImpl = !pDeclMD->IsInterface(); + } + } + } +-- +2.7.4 + |