On Mon, 28 Nov 2005, Richard Bell wrote: > I'm trying to make some enhancements to Win32::IE::Mechanize that > involve (in part) blocking popups. Several online examples suggest > catching the NewWindow event and setting cancel true. When I attempt > to do so I get Win32::OLE crashes. I've included an example program > that exhibits the issue on my machines:
Thanks for the report! This is a bug in Win32::OLE. Here is a fix: --- OLE.xs.~1~ Mon Nov 28 16:15:09 2005 +++ OLE.xs Mon Nov 28 16:15:09 2005 @@ -2306,10 +2306,12 @@ SysFreeString(*V_BSTRREF(pVariant)); break; case VT_DISPATCH: - (*V_DISPATCHREF(pVariant))->Release(); + if (*V_DISPATCHREF(pVariant)) + (*V_DISPATCHREF(pVariant))->Release(); break; case VT_UNKNOWN: - (*V_UNKNOWNREF(pVariant))->Release(); + if (*V_UNKNOWNREF(pVariant)) + (*V_UNKNOWNREF(pVariant))->Release(); break; } VariantInit(pVariant); End of Patch. With the patch applied, the crash goes away and all popups are blocked. Of course I first had to disable popup blockers in IE itself, and in the Google toolbar before I could even see the problem... Cheers, -Jan PS: Please don't use HTML email, especially if you include source samples.