On Thu, Mar 11, 2021 at 03:47:17PM -0600, Qing Zhao wrote: > Hi, Kees, > > Sorry for the late reply (I have been busy with other work recently). > > Currently, I am working on the issue of flexible length array as the last > field of the structure. > > In order to fix it correctly, I have the following question: > > > > On Feb 26, 2021, at 3:42 PM, Kees Cook <keesc...@chromium.org> wrote: > > > > On Thu, Feb 25, 2021 at 05:56:38PM -0600, Qing Zhao wrote: > >> Just noticed that you didn’t add -fauto-var-init-approach=D to the command > >> line. > > > > Ah-ha! I didn't realize that was needed; thanks. However, now some of the > > sources crash in a different way. Here's the reproducer: > > > > $ cat poc.i > > struct a { > > int b; > > int array[]; > > }; > > void c() { > > struct a d; > > } > > > > For such variable length array as the last field of the structure, static > initialization is not allowed, > User needs to explicitly allocate memory and initialize the allocated array > manually in the source code. > > So, if the compiler has to initialize this structure when requested by > -ftrivial-auto-var-init, I think that > only the fields before the last fields need to be initialized, Is this the > correct behavior you expected?
Right, that would be my expectation as well. Putting such a struct on the stack tends to be nonsensical, but maybe happens if part of a union, which would get initialized correctly, etc: union { struct a { int b; int array[]; }; char buf[32]; }; -- Kees Cook