Re: [PATCH] fast-export: avoid NULL pointer arithmetic
- Date: Fri, 11 May 2018 15:11:46 +0200
- From: Duy Nguyen <pclouds@xxxxxxxxx>
- Subject: Re: [PATCH] fast-export: avoid NULL pointer arithmetic
On Fri, May 11, 2018 at 10:56 AM, Jeff King <peff@xxxxxxxx> wrote:
> On Fri, May 11, 2018 at 08:19:59AM +0200, Duy Nguyen wrote:
>> On Fri, May 11, 2018 at 6:49 AM, Junio C Hamano <gitster@xxxxxxxxx> wrote:
>> > Junio C Hamano <gitster@xxxxxxxxx> writes:
>> >> René Scharfe <l.s.r@xxxxxx> writes:
>> >>>> But it somehow feels backwards in spirit to me, as the reason why we
>> >>>> use "void *" there in the decoration field is because we expect that
>> >>>> we'd have a pointer to some struture most of the time, and we have
>> >>>> to occasionally store a small integer there.
>> >>> Yes, fast-export seems to be the only place that stores an integer as
>> >>> a decoration.
>> >> With the decoration subsystem that might be the case, but I think
>> >> we have other codepaths where "void * .util" field in the structure
>> >> is used to store (void *)1, expecting that a normal allocation will
>> >> never yield a pointer that is indistinguishable from that value.
>> > I was looking at a different topic and noticed that bisect.c uses
>> > commit->util (which is of type "void *") to always store an int (it
>> > never stores a pointer and there is no mixing). This one is equally
>> > unportable as fast-export after your fix.
>> In both cases we should be able to use commit-slab instead of
>> commit->util. We could go even further and kill "util" pointer but
>> that's more work.
> I would love it if we could kill the util pointer in favor of
> commit-slab. Unfortunately the fast-export case is decorating non-commit
> objects, too.
Right. The "util" thing was a side discussion.
Back to fast-export, can we just allocate a new int on heap and point
it there? Allocating small pieces becomes quite cheap and fast with
mem-pool.h and we can avoid this storing integer in pointer business.