[omniORB] Apparent crash-level bug in CORBA::Object::_is_a

Nathaniel Smith njs@njs.dhis.net
Wed, 26 Jan 2000 17:06:29 -0800


I've been interested in Berlin (http://www.berlin-consortium.org) for
some time, and since it uses omniorb for its client/server communication,
I decided to try wiring up some demo clients in perl (yes, I _know_ there
is an omniorb python binding) to demonstrate the power of CORBA.  After
many travails with COPE, I managed to get a nameserver handle, and even
resolve the root ServerContextManager connection manager that Berlin
uses.  However, when I tried to do ServerContextManager->_narrow($obj);,
I found that the Berlin server (!) crashed, and hard.  Half the threads
exited on a segfault, and half remained running/frozen in the background...
quite impressive, all told.

I managed to narrow the problem down to the object id's I was using;
apparently my idl2perl compiler decided that the proper name for the
ServerContextManager object was IDL:omg.org/ServerContextManager:1.0,
whereas omni considers it to be IDL:ServerContextManager:1.0.  I'm not
sure who's correct, but it's kind of beside the point.  The point being,
ServerContextManager->_narrow made an IIOP call to
  boolean CORBA::Object::_is_a(in string iface)
with the argument IDL:omg.org/ServerContextManager:1.0, and the server
program was brought down.  This should be impossible to do from a client.

If I use the correct (sans omg.org/) object id, then it appears to work
correctly.

-- Nathaniel