From: Nguyen Thai Ngoc Duy Date: Wed, 27 Apr 2011 00:12:53 GMT Subject: Re: [PATCH] strbuf: allocate enough space when strbuf_setlen() is called first time Message-ID: In-Reply-To: <4DB738A1.8020706@lsrfire.ath.cx> 2011/4/27 René Scharfe : > Am 26.04.2011 19:18, schrieb Junio C Hamano: >> Nguyễn Thái Ngọc Duy  writes: >> >>> strbuf_grow(sb, 0) may allocate less than requested len and violate the >>> next assertion. >>> >>> Signed-off-by: Nguyễn Thái Ngọc Duy >>> --- >>>   strbuf.h |    2 +- >>>   1 files changed, 1 insertions(+), 1 deletions(-) >>> >>> diff --git a/strbuf.h b/strbuf.h >>> index 07060ce..ab213da 100644 >>> --- a/strbuf.h >>> +++ b/strbuf.h >>> @@ -34,7 +34,7 @@ extern void strbuf_grow(struct strbuf *, size_t); >>> >>>   static inline void strbuf_setlen(struct strbuf *sb, size_t len) { >>>      if (!sb->alloc) >>> -            strbuf_grow(sb, 0); >>> +            strbuf_grow(sb, len); >>>      assert(len<  sb->alloc); >> >> Wait.  Isn't _setlen() meant to be used only to truncate at the length, >> and isn't that clearly documented? >> >> I don't think we need this patch at all. > > How about something like this instead?  The call to strbuf_grow() was > introduced in a8f3e2219 when there was no strbuf_slopbuf buffer that > nowadays makes sure we always have a place to write an initial NUL. > We can take it out again now, simplifying the code and hopefully > avoiding future confusion. > >  strbuf.h |    4 +--- >  1 files changed, 1 insertions(+), 3 deletions(-) > > diff --git a/strbuf.h b/strbuf.h > index 07060ce..b157ede 100644 > --- a/strbuf.h > +++ b/strbuf.h > @@ -33,9 +33,7 @@ static inline size_t strbuf_avail(const struct strbuf *sb) { >  extern void strbuf_grow(struct strbuf *, size_t); > >  static inline void strbuf_setlen(struct strbuf *sb, size_t len) { > -       if (!sb->alloc) > -               strbuf_grow(sb, 0); > -       assert(len < sb->alloc); > +       assert(len < (sb->alloc ? sb->alloc : 1)); >        sb->len = len; >        sb->buf[len] = '\0'; >  } > > Fine to me. I forgot the document, saw _grow and was under impression that _setlen can grow too. -- Duy