Jacek Caban : mshtml: Don't call CP event sinks on detached documents.
Alexandre Julliard
julliard at winehq.org
Tue Nov 6 14:27:28 CST 2012
Module: wine
Branch: master
Commit: 8086af47b5f803bd2e9dc2cbdf9569a06aeaf630
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8086af47b5f803bd2e9dc2cbdf9569a06aeaf630
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Nov 5 19:04:18 2012 +0100
mshtml: Don't call CP event sinks on detached documents.
---
dlls/mshtml/htmlevent.c | 12 ++++++++++--
1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index 068114a..cb8a1cf 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -996,7 +996,12 @@ static void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj,
}
}
- if(cp_container) {
+ /*
+ * NOTE: CP events may require doc_obj reference, which we don't own. We make sure that
+ * it's safe to call event handler by checking nsevent_listener, which is NULL for
+ * detached documents.
+ */
+ if(cp_container && doc->nsevent_listener) {
ConnectionPoint *cp;
if(cp_container->forward_container)
@@ -1004,7 +1009,7 @@ static void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj,
for(cp = cp_container->cp_list; cp; cp = cp->next) {
if(cp->sinks_size && is_cp_event(cp->data, event_info[eid].dispid)) {
- for(i=0; i < cp->sinks_size; i++) {
+ for(i=0; doc->nsevent_listener && i < cp->sinks_size; i++) {
if(!cp->sinks[i].disp)
continue;
@@ -1028,6 +1033,9 @@ static void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj,
WARN("cp %s [%d] <<< %08x\n", debugstr_w(event_info[eid].name), i, hres);
}
}
+
+ if(!doc->nsevent_listener)
+ break;
}
}
}
More information about the wine-cvs
mailing list