Re: [PATCH] strvec: `strvec_splice()` to a statically initialized vector

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Dec 02, 2024 at 10:49:03AM +0900, Junio C Hamano wrote:

> > Let's avoid an invalid pointer error in case a client of
> > `strvec_splice()` ends up with something similar to:
> >
> >        struct strvec arr = STRVEC_INIT;
> >        const char *rep[] = { "foo" };
> >
> >        strvec_splice(&arr, 0, 0, rep, ARRAY_SIZE(rep));
> 
> Well spotted, but the explanation can be a bit more helpful to
> casual readers.  If there were a few paragraphs like below
> 
>     An empty strvec does not represent the array part of the
>     structure with a NULL pointer, but with a singleton empty array,
>     to help read-only applications.  This is similar to how an empty
>     strbuf uses a singleton empty string.
> 
>     This approach requires us to be careful when adding elements to
>     an empty instance.  The strvec_splice() API function we recently
>     introduced however forgot to special case an empty strvec, and
>     ended up applying realloc() to the singleton.
>     
> before your proposed commit log message, I wouldn't have needed to
> go read the implementation of STRVEC_INIT to understand what the fix
> is about.  From the fix by itself, it is a bit hard to see why
> empty_strvec needs to be special cased, until you re-read the
> implementation of STRVEC_INIT.

The explanation can certainly be improved.  I'll send a v2
iteration soon.  Thanks.




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux