Re: [PATCH] fast-export: avoid NULL pointer arithmetic
- From
Duy Nguyen <pclouds@gmail.com>
- Date
- May 11, 2018, 13:11 UTC
- Message-ID
- <CACsJy8CnJYsgDe11tK4JzH2sDRuLwgoUz=HCso5qOhEfyZNH5Q@mail.gmail.com>
- In-Reply-To
- <20180511085634.GC22086@sigill.intra.peff.net>
On Fri, May 11, 2018 at 10:56 AM, Jeff King <peff@peff.net> wrote:
Show 33 quoted lines
> 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@pobox.com> wrote: >> > Junio C Hamano <gitster@pobox.com> writes: >> > >> >> René Scharfe <l.s.r@web.de> 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.
-- Duy