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, <dl...@eglp.com <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, <dla...@gmail.com> 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 capnproto+...@googlegroups.com. >>>> 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 capnproto+...@googlegroups.com <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 capnproto+unsubscr...@googlegroups.com. Visit this group at https://groups.google.com/group/capnproto.