On Tue, Mar 28, 2017 at 01:35:36PM -0400, Jeff King wrote: > I thought I'd knock this out quickly before I forgot about it. But it > actually isn't so simple. > > The main caller in read_head_info() does indeed just pass strlen(line) > as the length in each case. But the cert parser really does need us to > respect the line length. So we either have to pass it in, or tie off the > string. > > The latter looks something like the patch below (on top of a minor > tweak around "eol" handling). It's sufficiently ugly that it may not > count as an actual cleanup, though. I'm OK if we just drop the idea. Here's that minor tweak, in case anybody is interested. It's less useful without that follow-on that touches "eol" more, but perhaps it increases readability on its own. -- >8 -- Subject: [PATCH] receive-pack: simplify eol handling in cert parsing The queue_commands_from_cert() function wants to handle each line of the cert individually. It looks for "\n" in the to-be-parsed bytes, and special-cases each use of eol (the end-of-line variable) when we didn't find one. Instead, we can just set the end-of-line variable to end-of-cert in the latter case. For advancing to the next line, it's OK for us to move our pointer past end-of-cert, because our loop condition just checks for pointer inequality. And it doesn't even violate the ANSI C "no more than one past the end of an array" rule, because we know in the worst case we've hit the terminating NUL of the strbuf. Signed-off-by: Jeff King <peff@xxxxxxxx> --- builtin/receive-pack.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index 5d9e4da0a..58de2a1a9 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -1524,8 +1524,10 @@ static void queue_commands_from_cert(struct command **tail, while (boc < eoc) { const char *eol = memchr(boc, '\n', eoc - boc); - tail = queue_command(tail, boc, eol ? eol - boc : eoc - boc); - boc = eol ? eol + 1 : eoc; + if (!eol) + eol = eoc; + tail = queue_command(tail, boc, eol - boc); + boc = eol + 1; } } -- 2.12.2.845.g55fcf8b10