2011/4/27 Renà Scharfe <rene.scharfe@xxxxxxxxxxxxxx>: > Am 26.04.2011 19:18, schrieb Junio C Hamano: >> Nguyán ThÃi Ngác Duy<pclouds@xxxxxxxxx> Â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<pclouds@xxxxxxxxx> >>> --- >>>  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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html