Understood. Thanks again for taking a look. We will update our schemas to make sure that we are no longer doing this.
On Thursday, June 23, 2016 at 6:26:49 PM UTC-4, Kenton Varda wrote: > > See: https://github.com/sandstorm-io/capnproto/issues/344 > > Unfortunately, fixing the bug would silently break backwards-compatibility > for affected schemas, which could lead to all kinds of bad things. Instead, > I've updated the code to detect the buggy condition and throw an exception. > The good news is that this is pretty obscure and in particular none of the > Cap'n Proto or Sandstorm schemas are affected. > > After a few releases, we'll remove the checks and compile the schemas > correctly. For now, you'll need to structure your schema differently. > > Thanks for bringing this to my attention! > > -Kenton > > On Thu, Jun 23, 2016 at 1:22 PM, <[email protected] <javascript:>> wrote: > >> Thanks for the advice and taking a look at this. I will update my schema >> to use structs instead of groups. >> >> On Thursday, June 23, 2016 at 3:40:03 PM UTC-4, Kenton Varda wrote: >>> >>> Ouch, that seems bad. Thanks for the investigative work and clear repro >>> case. I'm looking at this now. >>> >>> So far it seems like the bug is somehow triggered by having such a >>> deeply nested union/group hierarchy. FWIW, I would generally recommend >>> using separate structs rather than groups unless the group is trivial or is >>> necessary for backwards compatibility. >>> >>> That said, that's not an excuse for this bug. >>> >>> -Kenton >>> >>> On Thu, Jun 23, 2016 at 11:44 AM, <[email protected]> wrote: >>> >>>> Hi, >>>> >>>> I came across a weird behavior when using capnproto and was wondering >>>> if there was something I'm doing wrong or if this is a potential bug in >>>> the >>>> system. Consider the following schema that I created: >>>> >>>> @0xb9e4b6b777f18b59; >>>> >>>> struct Fields { >>>> field1 @0 :Int32; >>>> field2 @1 :Int64; >>>> field3 @2 :Int32; >>>> eventType : union { >>>> unknownEvent @3: Void; >>>> sampleEvent : group { >>>> field4 @4 :Int32; >>>> request : union { >>>> field5 @5: Void; >>>> field6 : group { >>>> field7 @6 :Int16; >>>> field8 @7 :Int32; >>>> field9 @8 :Float64; >>>> field10 @9 :Int32; >>>> } >>>> } >>>> } >>>> } >>>> } >>>> >>>> >>>> I noticed that when I set field8 = 100 and then field10 = 200, field8 >>>> also becomes 200. I decided to look at the byte layout that this schema >>>> created using capnp compile -ocapnp and saw the following: >>>> >>>> # sample.capnp >>>> >>>> @0xb9e4b6b777f18b59; >>>> >>>> struct Fields @0x87848103d33eda11 { # 40 bytes, 0 ptrs >>>> >>>> field1 @0 :Int32; # bits[0, 32) >>>> >>>> field2 @1 :Int64; # bits[64, 128) >>>> >>>> field3 @2 :Int32; # bits[32, 64) >>>> >>>> eventType :group { >>>> >>>> union { # tag bits [128, 144) >>>> >>>> unknownEvent @3 :Void; # bits[0, 0), union tag = 0 >>>> >>>> sampleEvent :group { # union tag = 1 >>>> >>>> field4 @4 :Int32; # bits[160, 192) >>>> >>>> request :group { >>>> >>>> union { # tag bits [144, 160) >>>> >>>> field5 @5 :Void; # bits[0, 0), union tag = 0 >>>> >>>> field6 :group { # union tag = 1 >>>> >>>> field7 @6 :Int16; # bits[192, 208) >>>> >>>> field8 @7 :Int32; # bits[224, 256) >>>> >>>> field9 @8 :Float64; # bits[256, 320) >>>> >>>> field10 @9 :Int32; # bits[224, 256) >>>> >>>> } >>>> >>>> } >>>> >>>> } >>>> >>>> } >>>> >>>> } >>>> >>>> } >>>> >>>> } >>>> >>>> Notice how field 8 and field10 occupy the same memory region! Am I >>>> doing something wrong here or is this a bug? I tried this on the latest >>>> version of capnproto as well as version 0.5.2 and saw the same behavior. >>>> Any feedback would be greatly appreciated! >>>> >>>> Thanks, >>>> -David >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Cap'n Proto" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> Visit this group at https://groups.google.com/group/capnproto. >>>> >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "Cap'n Proto" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> Visit this group at https://groups.google.com/group/capnproto. >> > > -- You received this message because you are subscribed to the Google Groups "Cap'n Proto" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. Visit this group at https://groups.google.com/group/capnproto.
