From: Jim Meyering Date: Thu, 26 Apr 2012 17:26:33 GMT Subject: Re: [PATCH] diff: avoid stack-buffer-read-overrun for very long name Message-ID: <87ehrawgja.fsf@rho.meyering.net> In-Reply-To: Bert Wesarg wrote: > On Thu, Apr 26, 2012 at 18:26, Jim Meyering wrote: >> Bert Wesarg wrote: >>> On Thu, Apr 26, 2012 at 18:13, Junio C Hamano wrote: >>>> Jim Meyering writes: >>> strbuf_ensure_terminator(struct strbuf* buf, int term, int always)? >> >> Nice!  So far, that's the name I prefer. >> But why the third parameter? > > See the second part of my reply: Oh. I missed that. >>>> ------------------------------------ >>>> builtin/branch.c- if (!buf.len || buf.buf[buf.len-1] != '\n') >>>> builtin/branch.c: strbuf_addch(&buf, '\n'); >>>> -- >>>> strbuf.h- if (sb->len && sb->buf[sb->len - 1] != '\n') >>>> strbuf.h: strbuf_addch(sb, '\n'); >> >> Please note, that while they are checking the .len, they both behave >> differently if .len == 0 or not. >> The first always append a '\n', the latter only, if the string isn't empty. Glad you noticed the difference. However, is one exception worth complicating the interface?