[omniORB] MARSHAL from pyMarshal.cc

Marco Ferreira mferreira at devion.org
Mon May 19 14:34:03 BST 2008


Sorry for all my mails, but this is really intriguing me.
I've been hacking the following piece of code in pyMarshal.cc, to try to
figure out what was happening at omniORB level:

    static PyObject*
    unmarshalPyObjectEnum(cdrStream& stream, PyObject* d_o)
    { // repoId, name, item list

      char * string_ = PyString_AsString(PyObject_Repr(d_o));
      printf("%s\n", string_);

      PyObject* t_o = PyTuple_GET_ITEM(d_o, 3);

      OMNIORB_ASSERT(PyTuple_Check(t_o));

      CORBA::ULong e;
      e <<= stream;

      printf("e=%ld\n", e);

      if (e >= (CORBA::ULong)PyTuple_GET_SIZE(t_o))
        OMNIORB_THROW(MARSHAL, MARSHAL_InvalidEnumValue,
              (CORBA::CompletionStatus)stream.completion());

      PyObject* ev = PyTuple_GET_ITEM(t_o, e);
      Py_INCREF(ev);
      return ev;
    }

And the output when the throwing occurs is:

     (17, 'IDL:Incognito/SNMPVersion:1.0', 'SNMPVersion',
    (SNMP_V_UNKNOWN, SNMP_V1, SNMP_V2, SNMP_V3))
    e=-1075261268
    omniORB: 2008-05-19 13:12:04.188990: throw MARSHAL from
    pyMarshal.cc:3031 (NO,MARSHAL_InvalidEnumValue)

My question would be: how is it possible that 'e' value is below 0 since
it's declared as an unsigned long?


Marco Ferreira wrote:
> That was what I suspected, but unfortunately pyMarshel.cc still throws
> that MARSHAL.
> I'm sure both sides (including my proxy) have the same version. Could
> there be any other reason for this?
>
> Cheers
>
> Duncan Grisby wrote:
>   
>> On Thursday 15 May, Marco Ferreira wrote:
>>
>>   
>>     
>>> Could any kind soul tell me if this a result of a bug at omniORB code by
>>> any chance?
>>>
>>> omniORB: 2008-05-15 18:59:33.076226: throw MARSHAL from
>>> pyMarshal.cc:3026 (NO,MARSHAL_InvalidEnumValue)
>>>     
>>>       
>> This means that you have received an enum that claims to have a numeric
>> value larger than the largest defined enum item. Almost certainly that's
>> because the sender and receiver are using different versions of the IDL.
>> Check that both sides of the communication have the same IDL.
>>
>> Cheers,
>>
>> Duncan.
>>
>>   
>>     
>
>   




More information about the omniORB-list mailing list