diff options
author | John Chen <jochen@microsoft.com> | 2016-06-02 06:43:23 -0700 |
---|---|---|
committer | John Chen <jochen@microsoft.com> | 2016-06-02 06:43:23 -0700 |
commit | 21751dbaa36ffb621e79b4cfeb5a7db00d397511 (patch) | |
tree | bf619a3d0003a283914805645df22832cc2b0db9 /src/zap/zapinfo.cpp | |
parent | 98568fb845ccaa97e18433ac13741913d6c8ffec (diff) | |
download | coreclr-21751dbaa36ffb621e79b4cfeb5a7db00d397511.tar.gz coreclr-21751dbaa36ffb621e79b4cfeb5a7db00d397511.tar.bz2 coreclr-21751dbaa36ffb621e79b4cfeb5a7db00d397511.zip |
Validate new object construction in Ready to Run (#5398)
Existing Ready to Run implementation doesn't fully validate requests
to create object instances, and allows some invalidate requests (e.g.,
to create an instance of an abstract class). This causes failure of
test case Loader.classloader_generics_Instantiation_Negative_abstract01
in issue #5366.
Diffstat (limited to 'src/zap/zapinfo.cpp')
-rw-r--r-- | src/zap/zapinfo.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/zap/zapinfo.cpp b/src/zap/zapinfo.cpp index c918fcb02d..831c61b4b2 100644 --- a/src/zap/zapinfo.cpp +++ b/src/zap/zapinfo.cpp @@ -3434,6 +3434,9 @@ bool ZapInfo::getReadyToRunHelper(CORINFO_RESOLVED_TOKEN * pResolvedToken, switch (id) { case CORINFO_HELP_READYTORUN_NEW: + // Call CEEInfo::getNewHelper to validate the request (e.g., check for abstract class). + m_pEEJitInfo->getNewHelper(pResolvedToken, m_currentMethodHandle); + if ((getClassAttribs(pResolvedToken->hClass) & CORINFO_FLG_SHAREDINST) != 0) return false; // Requires runtime lookup. pImport = m_pImage->GetImportTable()->GetDynamicHelperCell( |