Browse Source

additional error checking to prevent accidental range over-reference

Arkady Trestman 16 years ago
parent
commit
9c73a2344d
1 changed files with 22 additions and 16 deletions
  1. 22 16
      direct/src/plugin_activex/PPPandaObject.cpp

+ 22 - 16
direct/src/plugin_activex/PPPandaObject.cpp

@@ -59,6 +59,21 @@ STDMETHODIMP_(unsigned long) PPandaObject::Release()
     return m_refs;
     return m_refs;
 }
 }
 
 
+STDMETHODIMP PPandaObject::QueryInterface(REFIID riid, void FAR* FAR* ppv)
+{
+    if(!IsEqualIID(riid, IID_IUnknown))
+    {
+        if(!IsEqualIID(riid, IID_IDispatch)) 
+        {
+            *ppv = NULL;      
+            return E_NOINTERFACE;
+        }
+    }
+    *ppv = this;
+    AddRef();
+    return NOERROR;
+}
+
 STDMETHODIMP PPandaObject::GetIDsOfNames(
 STDMETHODIMP PPandaObject::GetIDsOfNames(
     REFIID riid,
     REFIID riid,
     OLECHAR FAR* FAR* rgszNames,
     OLECHAR FAR* FAR* rgszNames,
@@ -139,6 +154,8 @@ STDMETHODIMP PPandaObject::Invoke(
     unsigned int FAR* puArgErr)
     unsigned int FAR* puArgErr)
 {
 {
     UNUSED(lcid);
     UNUSED(lcid);
+    HRESULT hr( S_OK );
+
 
 
     if(!IsEqualIID(riid, IID_NULL))
     if(!IsEqualIID(riid, IID_NULL))
     {
     {
@@ -149,8 +166,12 @@ STDMETHODIMP PPandaObject::Invoke(
         return E_FAIL;
         return E_FAIL;
     }
     }
 
 
+    if ( dispidMember >= m_idsOfNames.size( ) ) 
+    {
+        return E_FAIL;
+    }
+
     CString& name( m_idsOfNames[dispidMember] );
     CString& name( m_idsOfNames[dispidMember] );
-    HRESULT hr( S_OK );
 
 
     switch ( wFlags )
     switch ( wFlags )
     {
     {
@@ -183,18 +204,3 @@ STDMETHODIMP PPandaObject::Invoke(
     }
     }
     return hr;
     return hr;
 }
 }
-
-STDMETHODIMP PPandaObject::QueryInterface(REFIID riid, void FAR* FAR* ppv)
-{
-    if(!IsEqualIID(riid, IID_IUnknown))
-    {
-        if(!IsEqualIID(riid, IID_IDispatch)) 
-        {
-            *ppv = NULL;      
-            return E_NOINTERFACE;
-        }
-    }
-    *ppv = this;
-    AddRef();
-    return NOERROR;
-}