No my script is not calling abort() on network requests and it's not invoking page.open() while page loading is in-progress. As far as I can tell, I think my script is using the phantomjs API correctly.
Using this binary, I was able to reproduce what appears to be the same crash on a relatively consistent basis. I generated a new crash dump file and was able to get more information thanks to the debug symbols. But I quickly realized that the thread stacks in the crash dump file were not quite as useful because they were captured _after_ the access violation had occurred. The stack on one of the threads shows that it's using the google breakpad library to write out the minidump.
I started the phantomjs process within windbg and that proved more useful. Windbg breaks at the point where the access violation occurs and allowed me to inspect the thread stacks and local variables. It looks like the crash is occurring during JavaScript garbage collection but that's just my naive guess since I'm not intimately familiar with WebKit:
phantomjs!WTF::Bitmap<2048>::testAndSet+0x36
phantomjs!JSC::MarkedBlock::testAndSetMarked+0x1f
phantomjs!JSC::MarkedSpace::testAndSetMarked+0x1a
phantomjs!JSC::Heap::testAndSetMarked+0xc
phantomjs!JSC::MarkStack::internalAppend+0x10
phantomjs!JSC::MarkStack::append<JSC::Structure>+0x1a
phantomjs!JSC::PolymorphicAccessStructureList::visitAggregate+0x3e
phantomjs!JSC::StructureStubInfo::visitAggregate+0xba
phantomjs!JSC::CodeBlock::visitAggregate+0x1f3
phantomjs!JSC::FunctionExecutable::visitChildren+0x39
phantomjs!JSC::MarkStack::visitChildren+0x9f
phantomjs!JSC::MarkStack::drain+0x185
phantomjs!JSC::Heap::markRoots+0xe8
phantomjs!JSC::Heap::reset+0x11
phantomjs!JSC::Heap::allocateSlowCase+0x13
phantomjs!JSC::Heap::allocate+0x44
phantomjs!JSC::JSCell::operator new+0x15
phantomjs!JSC::StructureChain::create+0x11
phantomjs!JSC::Structure::prototypeChain+0x7c
phantomjs!cti_op_get_by_id_proto_list+0x381
In the MarkStack::internalAppend function, the JSCell pointer is null:
ALWAYS_INLINE void MarkStack::internalAppend(JSCell* cell)
{
ASSERT(!m_isCheckingForDefaultMarkViolation);
ASSERT(cell);
if (Heap::testAndSetMarked(cell))
return;
if (cell->structure()->typeInfo().type() >= CompoundType)
m_values.append(cell);
}