git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2] urlmatch.c: recompute ptr after append_normalized_escapes

From
Kyle J. McKay <mackyle@gmail.com>
Date
Sep 12, 2013, 20:38 UTC
Message-ID
<85CEBFAA-8905-46EC-88C5-5DDE629B73F9@gmail.com>
In-Reply-To
<xmqqioy5q4dd.fsf@gitster.dls.corp.google.com>
On Sep 12, 2013, at 11:30, Junio C Hamano wrote:
Show 15 quoted lines
>> +		/* append_normalized_escapes can cause norm.buf to change */
>> +		seg_start = norm.buf + seg_start_off;
>
> The change looks good, but I find that this comment is not placed in
> the right place.  It is good if the reader knows about an old bug to
> put it here, but if the first thing a reader reads is this updated
> version, the comment is better placed close to the place where the
> start_ofs variable captures the original value (i.e. "because the
> next call may relocate the buffer, we cannot grab seg_start upfront;
> instead we need to record the start_ofs here, and that is what this
> variable is about").
>
> It is too minor a point for a reroll, so I'll try to tweak it
> locally.  Something like this (but now I think about it, the comment
> may not even be necessary).

The longer comment looks good to me. If you think the code will be safe from simplification patches without a comment, that works for me too. I've just seen so many "simplification" patches go by on the list I'm concerned it will be a target otherwise leading to re-introduction of the problem.

Show 34 quoted lines
> diff --git a/urlmatch.c b/urlmatch.c
> index 01c6746..d1600e2 100644
> --- a/urlmatch.c
> +++ b/urlmatch.c
> @@ -282,9 +282,17 @@ char *url_normalize(const char *url, struct  
> url_info *out_info)
> 	}
> 	for (;;) {
> 		const char *seg_start;
> -		size_t seg_start_off = norm.len;
> +		size_t seg_start_off;
> 		const char *next_slash = url + strcspn(url, "/?#");
> 		int skip_add_slash = 0;
> +
> +		/*
> +		 * record the starting offset; appending escapes may
> +		 * relocate the buffer, so we cannot capture seg_start
> +		 * upfront and use it later.
> +		 */
> +		seg_start_off = norm.len;
> +
> 		/*
> 		 * RFC 3689 indicates that any . or .. segments should be
> 		 * unescaped before being checked for.
> @@ -298,7 +306,7 @@ char *url_normalize(const char *url, struct  
> url_info *out_info)
> 			strbuf_release(&norm);
> 			return NULL;
> 		}
> -		/* append_normalized_escapes can cause norm.buf to change */
> +
> 		seg_start = norm.buf + seg_start_off;
> 		if (!strcmp(seg_start, ".")) {
> 			/* ignore a . segment; be careful not to remove initial '/' */
Previous: Junio C HamanoNext: Jonathan Nieder
Message 6 of 8 in “urlmatch: append_normalized_escapes can reallocate norm.buf”
  1. urlmatch: append_normalized_escapes can reallocate norm.bufThomas Rast, Sep 12, 2013
  2. urlmatch.c: recompute ptr after append_normalized_escapesKyle J. McKay, Sep 12, 2013
  3. Thomas RastSep 12, 2013
  4. Junio C HamanoSep 12, 2013
  5. Junio C HamanoSep 12, 2013
  6. Kyle J. McKaySep 12, 2013
  7. Jonathan NiederSep 12, 2013
  8. Junio C HamanoSep 12, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.