Skip to content

Commit 8511002

Browse files
Guard remaining IErrorInfo usage under FEATURE_COMINTEROP (#103510)
* Guard GetErrorInfo and SetErrorInfo under COMINTEROP * Guard more IErrorInfo usage * Guard GetExceptionForHR usage * Guard RealCOMPlusThrowHR * Delete dummy oaild.h * Fix m_pErrorInfo initialization --------- Co-authored-by: Aaron Robinson <arobins@microsoft.com>
1 parent 5b962c3 commit 8511002

File tree

11 files changed

+76
-49
lines changed

11 files changed

+76
-49
lines changed

src/coreclr/inc/ex.h

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,10 @@ class Exception
192192
virtual BOOL IsDomainBound() {return m_innerException!=NULL && m_innerException->IsDomainBound();} ;
193193
virtual HRESULT GetHR() = 0;
194194
virtual void GetMessage(SString &s);
195+
#ifdef FEATURE_COMINTEROP
195196
virtual IErrorInfo *GetErrorInfo() { LIMITED_METHOD_CONTRACT; return NULL; }
196197
virtual HRESULT SetErrorInfo() { LIMITED_METHOD_CONTRACT; return S_OK; }
198+
#endif // FEATURE_COMINTEROP
197199
void SetInnerException(Exception * pInnerException) { LIMITED_METHOD_CONTRACT; m_innerException = pInnerException; }
198200

199201
// Dynamic type query for catchers
@@ -432,8 +434,10 @@ class COMException : public HRException
432434
{
433435
friend bool DebugIsEECxxExceptionPointer(void* pv);
434436

437+
#ifdef FEATURE_COMINTEROP
435438
private:
436439
IErrorInfo *m_pErrorInfo;
440+
#endif // FEATURE_COMINTEROP
437441

438442
public:
439443
COMException();
@@ -488,7 +492,9 @@ class SEHException : public Exception
488492

489493
// Virtual overrides
490494
HRESULT GetHR();
495+
#ifdef FEATURE_COMINTEROP
491496
IErrorInfo *GetErrorInfo();
497+
#endif // FEATURE_COMINTEROP
492498
void GetMessage(SString &result);
493499

494500
protected:
@@ -533,7 +539,9 @@ class DelegatingException : public Exception
533539
// Virtual overrides
534540
virtual BOOL IsDomainBound() {return Exception::IsDomainBound() ||(m_delegatedException!=NULL && m_delegatedException->IsDomainBound());} ;
535541
HRESULT GetHR();
542+
#ifdef FEATURE_COMINTEROP
536543
IErrorInfo *GetErrorInfo();
544+
#endif // FEATURE_COMINTEROP
537545
void GetMessage(SString &result);
538546
virtual Exception *Clone();
539547

@@ -1290,15 +1298,19 @@ inline HRMsgException::HRMsgException(HRESULT hr, SString const &s)
12901298
}
12911299

12921300
inline COMException::COMException()
1293-
: HRException(),
1294-
m_pErrorInfo(NULL)
1301+
: HRException()
1302+
#ifdef FEATURE_COMINTEROP
1303+
, m_pErrorInfo(NULL)
1304+
#endif // FEATURE_COMINTEROP
12951305
{
12961306
WRAPPER_NO_CONTRACT;
12971307
}
12981308

12991309
inline COMException::COMException(HRESULT hr)
1300-
: HRException(hr),
1301-
m_pErrorInfo(NULL)
1310+
: HRException(hr)
1311+
#ifdef FEATURE_COMINTEROP
1312+
, m_pErrorInfo(NULL)
1313+
#endif // FEATURE_COMINTEROP
13021314
{
13031315
LIMITED_METHOD_CONTRACT;
13041316
}

src/coreclr/pal/inc/rt/oaidl.h

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/coreclr/pal/inc/rt/ole2.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,4 @@
77

88
#include "objidl.h"
99
#include "servprov.h"
10-
#include "oaidl.h"
1110

src/coreclr/pal/inc/rt/oleauto.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
#ifndef _OLEAUTO_H_
1313
#define _OLEAUTO_H_
14-
#include "oaidl.h"
1514

1615
#ifndef BEGIN_INTERFACE
1716
#define BEGIN_INTERFACE

src/coreclr/pal/prebuilt/inc/metahost.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ typedef interface ICLRRuntimeInfo ICLRRuntimeInfo;
8282

8383
/* header files for imported files */
8484
#include "unknwn.h"
85-
#include "oaidl.h"
8685
#include "ocidl.h"
8786
#include "mscoree.h"
8887

src/coreclr/utilcode/ex.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -811,11 +811,13 @@ HRESULT SEHException::GetHR()
811811
return m_exception.ExceptionCode;
812812
}
813813

814+
#ifdef FEATURE_COMINTEROP
814815
IErrorInfo *SEHException::GetErrorInfo()
815816
{
816817
LIMITED_METHOD_CONTRACT;
817818
return NULL;
818819
}
820+
#endif // FEATURE_COMINTEROP
819821

820822
void SEHException::GetMessage(SString &string)
821823
{
@@ -896,6 +898,7 @@ HRESULT DelegatingException::GetHR()
896898

897899
} // HRESULT DelegatingException::GetHR()
898900

901+
#ifdef FEATURE_COMINTEROP
899902
//------------------------------------------------------------------------------
900903
IErrorInfo *DelegatingException::GetErrorInfo()
901904
{
@@ -909,6 +912,7 @@ IErrorInfo *DelegatingException::GetErrorInfo()
909912
return pDelegate ? pDelegate->GetErrorInfo() : NULL;
910913

911914
} // IErrorInfo *DelegatingException::GetErrorInfo()
915+
#endif // FEATURE_COMINTEROP
912916

913917
//------------------------------------------------------------------------------
914918
void DelegatingException::GetMessage(SString &result)

src/coreclr/vm/clrex.cpp

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -366,18 +366,6 @@ IErrorInfo *CLRException::GetErrorInfo()
366366
// return the IErrorInfo we got...
367367
return pErrorInfo;
368368
}
369-
#else // FEATURE_COMINTEROP
370-
IErrorInfo *CLRException::GetErrorInfo()
371-
{
372-
LIMITED_METHOD_CONTRACT;
373-
return NULL;
374-
}
375-
HRESULT CLRException::SetErrorInfo()
376-
{
377-
LIMITED_METHOD_CONTRACT;
378-
379-
return S_OK;
380-
}
381369
#endif // FEATURE_COMINTEROP
382370

383371
void CLRException::GetMessage(SString &result)
@@ -698,13 +686,15 @@ OBJECTREF CLRException::GetThrowableFromException(Exception *pException)
698686
}
699687
else
700688
{
689+
#ifdef FEATURE_COMINTEROP
701690
SafeComHolder<IErrorInfo> pErrInfo(pException->GetErrorInfo());
702691

703692
if (pErrInfo != NULL)
704693
{
705694
GetExceptionForHR(hr, pErrInfo, &oRetVal);
706695
}
707696
else
697+
#endif // FEATURE_COMINTEROP
708698
{
709699
SString message;
710700
pException->GetMessage(message);
@@ -938,12 +928,14 @@ HRESULT EEException::GetHR()
938928
return EEException::GetHRFromKind(m_kind);
939929
}
940930

931+
#ifdef FEATURE_COMINTEROP
941932
IErrorInfo *EEException::GetErrorInfo()
942933
{
943934
LIMITED_METHOD_CONTRACT;
944935

945936
return NULL;
946937
}
938+
#endif // FEATURE_COMINTEROP
947939

948940
BOOL EEException::GetThrowableMessage(SString &result)
949941
{

src/coreclr/vm/clrex.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,10 @@ class CLRException : public Exception
129129
}
130130

131131
HRESULT GetHR();
132+
#ifdef FEATURE_COMINTEROP
132133
IErrorInfo *GetErrorInfo();
133134
HRESULT SetErrorInfo();
135+
#endif // FEATURE_COMINTEROP
134136

135137
void GetMessage(SString &result);
136138

@@ -222,7 +224,9 @@ class EEException : public CLRException
222224

223225
// Virtual overrides
224226
HRESULT GetHR();
227+
#ifdef FEATURE_COMINTEROP
225228
IErrorInfo *GetErrorInfo();
229+
#endif // FEATURE_COMINTEROP
226230
void GetMessage(SString &result);
227231
OBJECTREF CreateThrowable();
228232

@@ -842,6 +846,7 @@ LONG CLRNoCatchHandler(EXCEPTION_POINTERS* pExceptionInfo, PVOID pv);
842846
//
843847
// Thus, the scoped use of FAULT_NOT_FATAL macro.
844848
#undef EX_CATCH_HRESULT
849+
#ifdef FEATURE_COMINTEROP
845850
#define EX_CATCH_HRESULT(_hr) \
846851
EX_CATCH \
847852
{ \
@@ -857,6 +862,15 @@ LONG CLRNoCatchHandler(EXCEPTION_POINTERS* pExceptionInfo, PVOID pv);
857862
_ASSERTE(FAILED(_hr)); \
858863
} \
859864
EX_END_CATCH(SwallowAllExceptions)
865+
#else // FEATURE_COMINTEROP
866+
#define EX_CATCH_HRESULT(_hr) \
867+
EX_CATCH \
868+
{ \
869+
(_hr) = GET_EXCEPTION()->GetHR(); \
870+
_ASSERTE(FAILED(_hr)); \
871+
} \
872+
EX_END_CATCH(SwallowAllExceptions)
873+
#endif // FEATURE_COMINTEROP
860874

861875
#endif // !DACCESS_COMPILE
862876

src/coreclr/vm/excep.cpp

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2989,7 +2989,6 @@ void FreeExceptionData(ExceptionData *pedata)
29892989
if (pedata->bstrHelpFile)
29902990
SysFreeString(pedata->bstrHelpFile);
29912991
}
2992-
#endif // FEATURE_COMINTEROP
29932992

29942993
void GetExceptionForHR(HRESULT hr, IErrorInfo* pErrInfo, OBJECTREF* pProtectedThrowable)
29952994
{
@@ -3005,7 +3004,6 @@ void GetExceptionForHR(HRESULT hr, IErrorInfo* pErrInfo, OBJECTREF* pProtectedTh
30053004
// Initialize
30063005
*pProtectedThrowable = NULL;
30073006

3008-
#if defined(FEATURE_COMINTEROP)
30093007
if (pErrInfo != NULL)
30103008
{
30113009
// If this represents a managed object...
@@ -3039,7 +3037,6 @@ void GetExceptionForHR(HRESULT hr, IErrorInfo* pErrInfo, OBJECTREF* pProtectedTh
30393037
(*pProtectedThrowable) = ex.GetThrowable();
30403038
}
30413039
}
3042-
#endif // defined(FEATURE_COMINTEROP)
30433040

30443041
// If we made it here and we don't have an exception object, we didn't have a valid IErrorInfo
30453042
// so we'll create an exception based solely on the hresult.
@@ -3056,20 +3053,32 @@ void GetExceptionForHR(HRESULT hr, OBJECTREF* pProtectedThrowable)
30563053
{
30573054
THROWS;
30583055
GC_TRIGGERS; // because of IErrorInfo
3059-
MODE_ANY;
3056+
MODE_COOPERATIVE;
30603057
}
30613058
CONTRACTL_END;
30623059

30633060
// Get an IErrorInfo if one is available.
30643061
IErrorInfo *pErrInfo = NULL;
3065-
#ifdef FEATURE_COMINTEROP
30663062
if (SafeGetErrorInfo(&pErrInfo) != S_OK)
30673063
pErrInfo = NULL;
3068-
#endif // FEATURE_COMINTEROP
30693064

30703065
GetExceptionForHR(hr, pErrInfo, pProtectedThrowable);
30713066
}
3067+
#else
3068+
void GetExceptionForHR(HRESULT hr, OBJECTREF* pProtectedThrowable)
3069+
{
3070+
CONTRACTL
3071+
{
3072+
GC_TRIGGERS;
3073+
NOTHROW;
3074+
MODE_COOPERATIVE;
3075+
}
3076+
CONTRACTL_END;
30723077

3078+
EEMessageException ex(hr);
3079+
(*pProtectedThrowable) = ex.GetThrowable();
3080+
}
3081+
#endif // FEATURE_COMINTEROP
30733082

30743083
//
30753084
// Maps a Win32 fault to a COM+ Exception enumeration code
@@ -11202,6 +11211,7 @@ VOID DECLSPEC_NORETURN RealCOMPlusThrowNonLocalized(RuntimeExceptionKind reKind,
1120211211
//==========================================================================
1120311212
// Throw a runtime exception based on an HResult
1120411213
//==========================================================================
11214+
#ifdef FEATURE_COMINTEROP
1120511215
VOID DECLSPEC_NORETURN RealCOMPlusThrowHR(HRESULT hr, IErrorInfo* pErrInfo, Exception * pInnerException)
1120611216
{
1120711217
CONTRACTL
@@ -11224,7 +11234,6 @@ VOID DECLSPEC_NORETURN RealCOMPlusThrowHR(HRESULT hr, IErrorInfo* pErrInfo, Exce
1122411234
//_ASSERTE((hr != COR_E_EXECUTIONENGINE) ||
1122511235
// !"ExecutionEngineException shouldn't be thrown. Use EEPolicy to failfast or a better exception. The caller of this function should modify their code.");
1122611236

11227-
#ifdef FEATURE_COMINTEROP
1122811237
// check for complus created IErrorInfo pointers
1122911238
if (pErrInfo != NULL)
1123011239
{
@@ -11238,9 +11247,7 @@ VOID DECLSPEC_NORETURN RealCOMPlusThrowHR(HRESULT hr, IErrorInfo* pErrInfo, Exce
1123811247
GCPROTECT_END ();
1123911248
}
1124011249
}
11241-
#endif // FEATURE_COMINTEROP
1124211250

11243-
_ASSERTE((pErrInfo == NULL) || !"pErrInfo should always be null when FEATURE_COMINTEROP is disabled.");
1124411251
if (pInnerException == NULL)
1124511252
{
1124611253
EX_THROW(EEMessageException, (hr));
@@ -11272,8 +11279,6 @@ VOID DECLSPEC_NORETURN RealCOMPlusThrowHR(HRESULT hr)
1127211279
RealCOMPlusThrowHR(hr, (IErrorInfo*)NULL);
1127311280
}
1127411281

11275-
11276-
#ifdef FEATURE_COMINTEROP
1127711282
VOID DECLSPEC_NORETURN RealCOMPlusThrowHR(HRESULT hr, tagGetErrorInfo)
1127811283
{
1127911284
CONTRACTL
@@ -11293,6 +11298,19 @@ VOID DECLSPEC_NORETURN RealCOMPlusThrowHR(HRESULT hr, tagGetErrorInfo)
1129311298
// Throw the exception.
1129411299
RealCOMPlusThrowHR(hr, pErrInfo);
1129511300
}
11301+
#else // FEATURE_COMINTEROP
11302+
VOID DECLSPEC_NORETURN RealCOMPlusThrowHR(HRESULT hr)
11303+
{
11304+
CONTRACTL
11305+
{
11306+
THROWS;
11307+
DISABLED(GC_NOTRIGGER); // Must sanitize first pass handling to enable this
11308+
MODE_ANY;
11309+
}
11310+
CONTRACTL_END;
11311+
11312+
EX_THROW(EEMessageException, (hr));
11313+
}
1129611314
#endif // FEATURE_COMINTEROP
1129711315

1129811316

src/coreclr/vm/excep.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,9 @@ VOID DECLSPEC_NORETURN RealCOMPlusThrow(RuntimeExceptionKind reKind, UINT resID
286286
// passed as the first substitution string (%1).
287287
//==========================================================================
288288

289+
#ifdef FEATURE_COMINTEROP
289290
VOID DECLSPEC_NORETURN RealCOMPlusThrowHR(HRESULT hr, IErrorInfo* pErrInfo, Exception * pInnerException = NULL);
291+
#endif // FEATURE_COMINTEROP
290292
VOID DECLSPEC_NORETURN RealCOMPlusThrowHR(HRESULT hr);
291293
VOID DECLSPEC_NORETURN RealCOMPlusThrowHR(HRESULT hr, UINT resID, LPCWSTR wszArg1 = NULL, LPCWSTR wszArg2 = NULL,
292294
LPCWSTR wszArg3 = NULL, LPCWSTR wszArg4 = NULL, LPCWSTR wszArg5 = NULL,
@@ -359,7 +361,9 @@ void ExceptionPreserveStackTrace(OBJECTREF throwable);
359361
// Create an exception object for an HRESULT
360362
//==========================================================================
361363

364+
#ifdef FEATURE_COMINTEROP
362365
void GetExceptionForHR(HRESULT hr, IErrorInfo* pErrInfo, OBJECTREF* pProtectedThrowable);
366+
#endif // FEATURE_COMINTEROP
363367
void GetExceptionForHR(HRESULT hr, OBJECTREF* pProtectedThrowable);
364368
HRESULT GetHRFromThrowable(OBJECTREF throwable);
365369

src/coreclr/vm/marshalnative.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,9 +438,9 @@ extern "C" void QCALLTYPE MarshalNative_GetExceptionForHR(INT32 errorCode, LPVOI
438438

439439
BEGIN_QCALL;
440440

441+
#ifdef FEATURE_COMINTEROP
441442
// Retrieve the IErrorInfo to use.
442443
IErrorInfo* pErrorInfo = (IErrorInfo*)errorInfo;
443-
#ifdef FEATURE_COMINTEROP
444444
if (pErrorInfo == (IErrorInfo*)(-1))
445445
{
446446
pErrorInfo = NULL;
@@ -456,7 +456,11 @@ extern "C" void QCALLTYPE MarshalNative_GetExceptionForHR(INT32 errorCode, LPVOI
456456

457457
OBJECTREF exceptObj = NULL;
458458
GCPROTECT_BEGIN(exceptObj);
459+
#ifdef FEATURE_COMINTEROP
459460
::GetExceptionForHR(errorCode, pErrorInfo, &exceptObj);
461+
#else
462+
::GetExceptionForHR(errorCode, &exceptObj);
463+
#endif // FEATURE_COMINTEROP
460464
retVal.Set(exceptObj);
461465
GCPROTECT_END();
462466

0 commit comments

Comments
 (0)