From: Jeff King Date: Sat, 08 Feb 2014 21:21:54 GMT Subject: Re: [PATCH] builtin/blame.c::prepare_lines: fix allocation size of sb->lineno Message-ID: <20140208212154.GA4283@sigill.intra.peff.net> In-Reply-To: <87lhxmc4sr.fsf@fencepost.gnu.org> On Sat, Feb 08, 2014 at 10:49:40AM +0100, David Kastrup wrote: > But please note that since sb->lineno originally comes from a zeroed > memory area and is passed to xrealloc, this requires that after > > int *p; > memset(&p, 0, sizeof(p)); > > the equivalence > > ((void *)p == NULL) > > will hold. While this is true on most platforms, and while the C > standard guarantees the slightly different > ((void *)0 == NULL) > is true, it makes no statement concerning the memory representation of > the NULL pointer. > > I have not bothered addressing this non-compliance with the C standard > as it would be polishing a turd. A wholesale replacement has already > been proposed, and it's likely that this assumption is prevalent in the > Git codebase elsewhere anyway. Yes, we explicitly break this part of the standard in the name of practicality (it simplifies frequently-used code, and machines on which it matters are rare enough that nobody has ever complained about it). So I do not think this is a problem. However, is there a reason not to use: sizeof(*sb->lineno) rather than sizeof(int) to avoid type-mismatch errors entirely (this applies both to this patch, and to any proposed rewrites using malloc). -Peff