Re: [PATCH 1/3] for-each-ref: introduce %C(...) for color
- From
John Keeping <john@keeping.me.uk>
- Date
- May 25, 2013, 12:20 UTC
- Message-ID
- <20130525122002.GI27005@serenity.lan>
- In-Reply-To
- <CALkWK0=16dmz548TQoj5YKp0dai7p1dpYAdXiWnnpiQdzyYHQg@mail.gmail.com>
On Sat, May 25, 2013 at 05:20:29PM +0530, Ramkumar Ramachandra wrote:
Show 5 quoted lines
> Antoine Pelisse wrote: > > Is it not possible for "color" to be used uninitialized here ? > > My compiler didn't complain; what am I missing? Doesn't the > declaration char color[COLOR_MAXLEN]; initialize an empty string?
Why would it? The variable's begin allocated on the stack and the C standard only zero-initializes variables with static storage duration; Section 6.7.9 of the C11 standard says:
If an object that has automatic storage duration is not initialized
explicitly, its value is indeterminate.I suspect the compiler doesn't complain because there is a path through the function that initializes color before reading it (if we hit the "if" branch in the loop before the "else" branch) and the compile assumes that there is something in the function's contract that guarantees that we follow this path. But I don't think that's correct so you do need to initialize color to the empty string.
> More importantly, aren't there numerous instances of this in the > codebase?
Care to point at one? I had a quick look and all places I inspected are either static or write to the array before reading it.