Re: ORBit2 issues (was Re: ORBit 0.5.15 any problem?)
- From: Huw Rogers <count0 metavector com>
- To: Michael Meeks <michael ximian com>, orbit <orbit-list gnome org>
- Subject: Re: ORBit2 issues (was Re: ORBit 0.5.15 any problem?)
- Date: Mon, 27 May 2002 22:48:07 +0900
> > 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]