Aleksandar • Vacić

iOS bits and pieces

IE6 + scriptaculous + QuickFind BHO = pure virtual function call error = IE crash

If you are using script.aculo.us scripts to do some fancy web-apping, read this post.

I’ve implemented this library of scripts in one CMS app I built. On one hand you have a list of available files and you need to choose some and sort them out into groups. 100% perfect situation for draggable / droppable / sortable combo that scriptaculous implements.

However, at three different computers, IE 6 (XP SP1, fully patched) would crash as soon as the page opening starts. It crashes in iexplore.exe and kernel32.dll, giving away this lovely file as output (small sample given below).

<?xml version="1.0" encoding="UTF-16"?>

<DATABASE>

<EXE NAME="IEXPLORE.EXE" FILTER="GRABMI_FILTER_PRIVACY">

    <MATCHING_FILE NAME="HMMAPI.DLL" SIZE="36352" CHECKSUM="0x8DE5BA15"

     BIN_FILE_VERSION="6.0.2800.1106" BIN_PRODUCT_VERSION="6.0.2800.1106"

     PRODUCT_VERSION="6.00.2800.1106"

     FILE_DESCRIPTION="Microsoft HTTP Mail Simple MAPI"

...

No matter what I tried to find the cause, it would crash. Sometimes it would show the page content, but then crash before finishes loading. Totally confusing, as I could not repeat this on any other computer I tried.

Thus, the last resort. I went to the crime scene last night to try to debug the damn thing. I spent just over 5h trying to figure this out until it ended on the most unexpected culprit of all.

One of the comps had Visual Studio installed and this turned out to be great help. Without it, I had no idea where to start looking but to disable one function at a time and see what happens.

Debugging the crush revealed that error thrown is R6025 pure virtual function call. As you can see, this returns 1000s of pages, which was not good sign at all, but at least was a start.

Sifting through all those pages, I tried many things. On one page someone said that if you have rel. positioned elements inside of scrolling div, IE would throw this error. I had exactly such situation, removed all such statements but it still happened. Then I encountered the page that sank my hopes even lower. IE’s engine seems to be broken more severely then I imagined. This was after 3h of searching, testing, trying.

In the meantime, purely by accident, we realized that IE crashes once the mouse has been moved. If I load the page but do not touch the mouse, page would load properly, no problems. As soon as the mouse was moved, IE goes crumbling down. Even more confusing.

Eventually, we found another computer that has the same WinXP/IE installation and tried there. Jaws were dropped when pages worked perfectly on that computer. I mean perfectly. This clearly meant that it isn’t IE alone, but in combination with something else. But to compare two PCs with dozens of apps was crazy. It would mean removing one app at the time and trying to figure out which one is the problem. Add to the fact that in Windows, uninstallation would not always remove all of app’s components or registry settings and this is not really an option to try.

More searching lead me to this Usenet post where one of Microsoft’s MVPs explained three things that lead IE to crash, and that one of them can be any of BHOs installed. BHO stands for Browser Helper Object - things like Google toolbar. The man recommends:

  1. open Tools / Internet Options, Advanced ta``` objective-c

  2. uncheck “enable third party browser extensions” - this will turn off all BHOs

After turning this off, everything worked perfectly. THe only thing was to figure out what was causing the crash. Enter BHO Deamon - nice little utility that lists out all the BHOs installed and allows you to disable some. There was just one BHO installed - it was Text Ware’s QuickFind. I tried looking for an update but it seems that this company is dead as their site is empty.

What I found is that it comes bundled with Cambridge Advanced Learner’s Dictionary on CD-ROM. What QuickFind does is that it detects mouse movements anywhere on the screen and detects displayed word in any active application and then gives you dictionary entry for it. Sounds quite handy, really, if it wasn’t for the fact that it caused IE to crash. And it was exactly in line with the previous discovery that IE crashes when mouse is moved. All pieces fitted together.

After disabling it, things were back in order and at 2am I got home.

Once again, if you have IE crashing consistently on particular web page - uncheck browser extensions support. It’s 99% chance that it will resolve the problem. You just need to figure out which BHO is giving you headache.