summaryrefslogtreecommitdiff
path: root/url.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2015-09-24 21:08:35 (GMT)
committerJunio C Hamano <gitster@pobox.com>2015-10-05 18:08:06 (GMT)
commit00b6c178c3ab475098f7a0bc63b2df2da508020c (patch)
treeeefc52933eb00b24ffb18ce489b05cc32913dd89 /url.c
parentf0766bf94ec7a398a5a524053ea5334883c16a2e (diff)
downloadgit-00b6c178c3ab475098f7a0bc63b2df2da508020c.zip
git-00b6c178c3ab475098f7a0bc63b2df2da508020c.tar.gz
git-00b6c178c3ab475098f7a0bc63b2df2da508020c.tar.bz2
use strbuf_complete to conditionally append slash
When working with paths in strbufs, we frequently want to ensure that a directory contains a trailing slash before appending to it. We can shorten this code (and make the intent more obvious) by calling strbuf_complete. Most of these cases are trivially identical conversions, but there are two things to note: - in a few cases we did not check that the strbuf is non-empty (which would lead to an out-of-bounds memory access). These were generally not triggerable in practice, either from earlier assertions, or typically because we would have just fed the strbuf to opendir(), which would choke on an empty path. - in a few cases we indexed the buffer with "original_len" or similar, rather than the current sb->len, and it is not immediately obvious from the diff that they are the same. In all of these cases, I manually verified that the strbuf does not change between the assignment and the strbuf_complete call. This does not convert cases which look like: if (sb->len && !is_dir_sep(sb->buf[sb->len - 1])) strbuf_addch(sb, '/'); as those are obviously semantically different. Some of these cases arguably should be doing that, but that is out of scope for this change, which aims purely for cleanup with no behavior change (and at least it will make such sites easier to find and examine in the future, as we can grep for strbuf_complete). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'url.c')
-rw-r--r--url.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/url.c b/url.c
index 7ca2a69..2d89ad1 100644
--- a/url.c
+++ b/url.c
@@ -120,8 +120,7 @@ char *url_decode_parameter_value(const char **query)
void end_url_with_slash(struct strbuf *buf, const char *url)
{
strbuf_addstr(buf, url);
- if (buf->len && buf->buf[buf->len - 1] != '/')
- strbuf_addch(buf, '/');
+ strbuf_complete(buf, '/');
}
void str_end_url_with_slash(const char *url, char **dest) {