[pygtk] gtkmozembed crashes

Andriy Khavryuchenko akhavr at khavr.com
Thu Dec 4 07:10:35 WST 2008


Andriy Khavryuchenko написав(ла):
> piotr maliński wrote:
>> try exporting this before running the app:
>> export MOZILLA_FIVE_HOME="/path/to/xulrunner"
>>
>> for example:
>>
>> export MOZILLA_FIVE_HOME="/usr/lib/xulrunner-1.9/"
> 
> Sorry, previous emails went personally to Piotr.
> 
> Wow!  Black magic!  Now it segfaults *after* show_all()  :)
> 
> $ MOZILLA_FIVE_HOME=/usr/lib/xulrunner-devel python /tmp/mozembed.py
> !!! here
> !!! there
> zsh: segmentation fault  MOZILLA_FIVE_HOME=/usr/lib/xulrunner-devel 
> python /tmp/mozembed.py
> 
> Current backtrace is:
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0xb66ea346 in nsEmbedStream::AppendToStream () from /usr/lib/libxul.so
> (gdb) bt
> #0  0xb66ea346 in nsEmbedStream::AppendToStream () from /usr/lib/libxul.so

No wonder either.

gtkmozembed2.cpp:

void
gtk_moz_embed_render_data(GtkMozEmbed *embed, const char *data,
			  guint32 len, const char *base_uri,
			  const char *mime_type)
{
   EmbedPrivate *embedPrivate;

   g_return_if_fail (embed != NULL);
   g_return_if_fail (GTK_IS_MOZ_EMBED(embed));

   embedPrivate = (EmbedPrivate *)embed->data;

   embedPrivate->OpenStream(base_uri, mime_type);
   embedPrivate->AppendToStream((const PRUint8*)data, len);
   embedPrivate->CloseStream();
}

Of course, noone checks for return codes...

The same time OpenStream here fails:

nsEmbedStream.cpp:

NS_METHOD
nsEmbedStream::OpenStream(nsIURI *aBaseURI, const nsACString& aContentType)
{
[...]
   rv = catMan->GetCategoryEntry("Gecko-Content-Viewers",
                                 flatContentType.get(),
                                 getter_Copies(docLoaderContractID));
   // Note: When the category manager does not find an entry for the 
requested
   // contract ID, it will return NS_ERROR_NOT_AVAILABLE. This conveniently
   // matches what this method wants to return in that case.
   if (NS_FAILED(rv))
     return rv;

   nsCOMPtr<nsIDocumentLoaderFactory> docLoaderFactory;
   docLoaderFactory = do_GetService(docLoaderContractID.get(), &rv);

Last line fails with code 0x80040154, which is 
NS_ERROR_FACTORY_NOT_REGISTERED

Why it could be?

Thanks

-- 
Sincerely,

Andrey Khavryuchenko            http://a.khavr.com/
KDS Software Group              http://www.kds.com.ua/
Software Solutions Company


More information about the pygtk mailing list