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

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
devel mailing list
[email protected]
http://mailman.openchange.org/listinfo/devel

Reply via email to