summaryrefslogtreecommitdiff
path: root/http-push.c
diff options
context:
space:
mode:
authorTay Ray Chuan <rctay89@gmail.com>2010-11-25 08:21:08 (GMT)
committerJunio C Hamano <gitster@pobox.com>2010-11-26 22:50:46 (GMT)
commitdfc2dcd9acf95794788f9471028485c2d2cc78ef (patch)
tree3018b876c81797bdca1ebe73626995f74c39f25d /http-push.c
parent0fdadc501ee42c530946731718dfdd710f4005d3 (diff)
downloadgit-dfc2dcd9acf95794788f9471028485c2d2cc78ef.zip
git-dfc2dcd9acf95794788f9471028485c2d2cc78ef.tar.gz
git-dfc2dcd9acf95794788f9471028485c2d2cc78ef.tar.bz2
http-push: check path length before using it
We use path_len to skip the base url/path, but we do not know for sure if path does indeed contain the base url/path. Check if this is so. Helped-by: Johnathan Nieder <jrnieder@gmail.com> Signed-off-by: Tay Ray Chuan <rctay89@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'http-push.c')
-rw-r--r--http-push.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/http-push.c b/http-push.c
index 565e580..bfa1fe7 100644
--- a/http-push.c
+++ b/http-push.c
@@ -1116,8 +1116,16 @@ static void handle_remote_ls_ctx(struct xml_ctx *ctx, int tag_closed)
}
}
if (path) {
- path += repo->path_len;
- ls->dentry_name = xstrdup(path);
+ const char *url = repo->url;
+ if (repo->path)
+ url = repo->path;
+ if (strncmp(path, url, repo->path_len))
+ error("Parsed path '%s' does not match url: '%s'\n",
+ path, url);
+ else {
+ path += repo->path_len;
+ ls->dentry_name = xstrdup(path);
+ }
}
} else if (!strcmp(ctx->name, DAV_PROPFIND_COLLECTION)) {
ls->dentry_flags |= IS_DIR;