> 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