When I try to open some u3d files, specifically those extracted from pdfs created with RenderPlus pdf creator, RPS 3D PDF 1.0 C29, the player crashes.
The files open successfully in Adobe Reader.
I attached one such a file - box.u3d
Opening file fails in cifxclodmodifier.cpp, ChangeMeshResolution(), line 481, where a function call
fails and returns null pointer, but the result is not checked/processed:
>>> m_pInputDataPacket->GetDataElement(m_meshGroupIndex, (void**) &pUnk);
>>> pUnk->QueryInterface(IID_IFXMeshGroup, (void**)&pMg);
Here pUnk is null.
The line: m_pInputDataPacket->GetDataElement(m_meshGroupIndex, (void**) &pUnk);
fails with error -2130444287 - IFX_E_DATAPACKET_INVALID_INDEX,
and pUnk is null on return.
Further debuging shows that CIFXModifierDataPacket::GetDataElement, cifmodifierdatapacket.cpp
fails on line 279:
if( IFXSUCCESS(result) && m_pState->m_LockedDataElement == inDataElementIndex )
result = IFX_E_DATAPACKET_LOCKED;
but few lines below the result is changed to IFX_E_DATAPACKET_INVALID_INDEX.
Also on another u3d file, there was a crash in IFXMixerQueueImpl.cpp, IFXMixerQueueImpl::Push
It does not check whether GetMotionMixerNR(0) returns non-zero pointer.
Added check for null pointer, and now the file is opened without crashing.