From: Gabriel Ivăncescu gabrielopcode@gmail.com
Props allocated with dispex_get_dprop_ref or dispex_get_dynid are purely internal to our implementation and must not be enumerated.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/dispex.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 5007f9a5d30..332cac8e2d1 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -85,6 +85,7 @@ typedef struct { } dynamic_prop_t;
#define DYNPROP_DELETED 0x01 +#define DYNPROP_HIDDEN 0x02
typedef struct { DispatchEx dispex; @@ -698,6 +699,8 @@ HRESULT dispex_get_dprop_ref(DispatchEx *This, const WCHAR *name, BOOL alloc, VA if(FAILED(hres)) return hres;
+ if(alloc) + prop->flags |= DYNPROP_HIDDEN; *ret = &prop->var; return S_OK; } @@ -711,6 +714,7 @@ HRESULT dispex_get_dynid(DispatchEx *This, const WCHAR *name, DISPID *id) if(FAILED(hres)) return hres;
+ prop->flags |= DYNPROP_HIDDEN; *id = DISPID_DYNPROP_0 + (prop - This->dynamic_data->props); return S_OK; } @@ -1856,7 +1860,8 @@ static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BS
static HRESULT next_dynamic_id(DispatchEx *dispex, DWORD idx, DISPID *ret_id) { - while(idx < dispex->dynamic_data->prop_cnt && dispex->dynamic_data->props[idx].flags & DYNPROP_DELETED) + while(idx < dispex->dynamic_data->prop_cnt && + (dispex->dynamic_data->props[idx].flags & (DYNPROP_DELETED | DYNPROP_HIDDEN))) idx++;
if(idx == dispex->dynamic_data->prop_cnt) {