> On Mar 11, 2021, at 6:46 PM, Kees Cook <keesc...@chromium.org> wrote:
> 
> 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];
> };
> 

Okay, thanks. This issue has been fixed in my local repository.

Qing
> -- 
> Kees Cook

Reply via email to