Fixing contracts violations, and adding missing contracts to some APIs.
authorFadi Hanna <fadim@microsoft.com>
Wed, 30 Mar 2016 16:27:04 +0000 (09:27 -0700)
committerFadi Hanna <fadim@microsoft.com>
Wed, 30 Mar 2016 16:27:04 +0000 (09:27 -0700)
Changing native format reader failure mode to fail fast instead of throwing and exception.

[tfs-changeset: 1591477]

src/vm/clsload.hpp
src/vm/nativeformatreader.h
src/vm/readytoruninfo.cpp

index ca561a8..e2705ae 100644 (file)
@@ -87,18 +87,24 @@ public:
 
     const HashedTypeEntry& SetClassHashBasedEntryValue(EEClassHashEntry_t * pClassHashEntry)
     {
+        LIMITED_METHOD_CONTRACT;
+
         m_EntryType = EntryType::IsHashedClassEntry;
         m_pClassHashEntry = dac_cast<PTR_EEClassHashEntry>(pClassHashEntry);
         return *this;
     }
     EEClassHashEntry_t * GetClassHashBasedEntryValue()
     {
+        LIMITED_METHOD_CONTRACT;
+
         _ASSERT(m_EntryType == EntryType::IsHashedClassEntry);
         return m_pClassHashEntry;
     }
 
     const HashedTypeEntry& SetTokenBasedEntryValue(mdTypeDef typeToken, Module * pModule)
     {
+        LIMITED_METHOD_CONTRACT;
+
         m_EntryType = EntryType::IsHashedTokenEntry;
         m_TokenAndModulePair.m_TypeToken = typeToken;
         m_TokenAndModulePair.m_pModule = pModule;
@@ -106,6 +112,8 @@ public:
     }
     const TokenTypeEntry& GetTokenBasedEntryValue()
     {
+        LIMITED_METHOD_CONTRACT;
+        
         _ASSERT(m_EntryType == EntryType::IsHashedTokenEntry);
         return m_TokenAndModulePair;
     }
index cfebb49..a410884 100644 (file)
@@ -44,7 +44,11 @@ namespace NativeFormat
         void ThrowBadImageFormatException()
         {
             _ASSERTE(false);
-            ThrowHR(COR_E_BADIMAGEFORMAT);
+
+#ifndef DACCESS_COMPILE
+            // Failfast instead of throwing, to avoid violating NOTHROW contracts of callers
+            EEPOLICY_HANDLE_FATAL_ERROR(COR_E_BADIMAGEFORMAT);
+#endif
         }
 
         uint EnsureOffsetInRange(uint offset, uint lookAhead)
index d00db71..1faf820 100644 (file)
@@ -84,7 +84,7 @@ BOOL ReadyToRunInfo::TryLookupTypeTokenFromName(NameHandle *pName, mdToken * pFo
     {
         GC_NOTRIGGER;
         NOTHROW;
-        SO_TOLERANT;
+        SO_INTOLERANT;
         SUPPORTS_DAC;
         PRECONDITION(!m_availableTypesHashtable.IsNull());
     }