Hi Shaheed, I'll follow-up on this ticket (#391) directly from the tracker rather than from the mailing-list to avoid duplicate of information.
Kind Regards,
Julien.
On Sun, 2012-03-18 at 16:34 +0000, Shaheed Haque wrote:
> Hi,
>
> There seem to be several IDL issues which prevent me retrieving
> exceptions for recurring appointments. The first is a simple case of
> an enum being encoded as 4 bytes instead of the 2 as spec'd:
>
> diff -C5 openchange-1.0-BORG-original/property.idl
> openchange-1.0-BORG/property.idl
> *** openchange-1.0-BORG-original/property.idl 2012-03-13
> 10:52:50.000000000 +0000
> --- openchange-1.0-BORG/property.idl 2012-03-18 15:14:49.823027524 +0000
> ***************
> *** 118,128 ****
> FirstDOW_Thursday = 0x4,
> FirstDOW_Friday = 0x5,
> FirstDOW_Saturday = 0x6
> } FirstDOW;
>
> ! typedef [v1_enum] enum {
> ARO_SUBJECT = 0x0001,
> ARO_MEETINGTYPE = 0x0002,
> ARO_REMINDERDELTA = 0x0004,
> ARO_REMINDER = 0x0008,
> ARO_LOCATION = 0x0010,
> --- 118,128 ----
> FirstDOW_Thursday = 0x4,
> FirstDOW_Friday = 0x5,
> FirstDOW_Saturday = 0x6
> } FirstDOW;
>
> ! typedef [enum16bit] enum {
> ARO_SUBJECT = 0x0001,
> ARO_MEETINGTYPE = 0x0002,
> ARO_REMINDERDELTA = 0x0004,
> ARO_REMINDER = 0x0008,
> ARO_LOCATION = 0x0010,
>
> The second issue is to do with decoding Exception_Msg. The spec says
> there are 2 uint16s followed by an array of chars, and this seems to
> be what the idl says:
>
>
> typedef [public,flag(NDR_NOALIGN)] struct {
> uint16 msgLength;
> uint16 msgLength2;
> [size_is(msgLength)] uint8 msg[];
> } Exception_Msg;
>
> but the emitted code looks ike this:
>
> _PUBLIC_ enum ndr_err_code ndr_pull_Exception_Msg(struct ndr_pull
> *ndr, int ndr_flags, struct Exception_Msg *r)
> {
> ...
> NDR_CHECK(ndr_pull_array_size(ndr, &r->msg));
> NDR_CHECK(ndr_pull_align(ndr, 2));
> NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS,
> &r->msgLength));
> NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS,
> &r->msgLength2));
> NDR_PULL_ALLOC_N(ndr, r->msg, ndr_get_array_size(ndr,
> &r->msg));
> NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->msg,
> ndr_get_array_size(ndr, &r->msg)));
>
> The call to ndr_pull_array_size seems to consume 4 bytes, which are
> not in the stream, and so things go wrong. It is as if the size_is
> clause is somehow ignored. I've poked around the Samba pidl compiler,
> but I am not sure how to fix this. I'll file a bug once my tracker
> account issue is resolved, but any help would be appreciated.
>
> Thanks, Shaheed
signature.asc
Description: This is a digitally signed message part
_______________________________________________ devel mailing list [email protected] http://mailman.openchange.org/listinfo/devel
