Re: ORBit2 issues (was Re: ORBit 0.5.15 any problem?)



> > Marshalling/demarshalling long long and unsigned long long members of
> > unions seems on it's face to be broken in ORBit2 (it appears to attempt
> > to force them into a 32bit ulong).
> 
> 	Can you log a bug about this in bugzilla.gnome.org - I've just reviewed
> the code and can see nothing obvious. Certainly, the same code is used
> to de-marshal long longs everywhere - regardless of whether they're in
> Unions. Is it possible that your system doesn't have guint64 ? I can see
> problems if you don't, since sizeof (ORBit_long_long) will not be valid
> / perhaps 32 bits.

In ORBit2, revisions 1.31/1.32 of corba-typecode.c
and revision 1.14 of corba-typecode.h created this problem by redefining
the sublabels[] array of a union as an array of CORBA_long (32bits) (was
previously an array of CORBA_any).

To see this:

cvs -z3 diff -r1.13 -r1.14 corba-typecode.h

a CORBA_long is insufficient to hold a CORBA_long_long or a
CORBA_unsigned_long_long discriminator value.

So if the union discriminator is >32 bits,
and one of the cases of the union is a >32bit constant (one of the
sublabels), then there will be a problem.

This IDL type would probably evidence the bug:

union u switch(unsigned long long) {
case 0x0000000000000001: string s;
case 0x0000000100000001: short h;
};

	-Huw
-- 
Huw Rogers <count0@metavector.com>




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]