From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
ramsay@ramsay1.demon.co.uk, yuelinho777@gmail.com,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH v3 2/3] lockfile.c: remove PATH_MAX limit in resolve_symlink()
Date: Thu, 31 Jul 2014 20:43:33 +0700 [thread overview]
Message-ID: <1406814214-21725-3-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1406814214-21725-1-git-send-email-pclouds@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
lockfile.c | 47 ++++++++++++++---------------------------------
1 file changed, 14 insertions(+), 33 deletions(-)
diff --git a/lockfile.c b/lockfile.c
index 968b28f..154915f 100644
--- a/lockfile.c
+++ b/lockfile.c
@@ -85,52 +85,33 @@ static char *last_path_elm(char *p)
static char *resolve_symlink(const char *in)
{
- static char p[PATH_MAX];
- size_t s = sizeof(p);
+ static struct strbuf p = STRBUF_INIT;
+ struct strbuf link = STRBUF_INIT;
int depth = MAXDEPTH;
- if (strlen(in) >= sizeof(p))
- return NULL;
- strcpy(p, in);
+ strbuf_reset(&p);
+ strbuf_addstr(&p, in);
while (depth--) {
- char link[PATH_MAX];
- int link_len = readlink(p, link, sizeof(link));
- if (link_len < 0) {
- /* not a symlink anymore */
- return p;
- }
- else if (link_len < sizeof(link))
- /* readlink() never null-terminates */
- link[link_len] = '\0';
- else {
- warning("%s: symlink too long", p);
- return p;
- }
+ if (strbuf_readlink(&link, p.buf, 0) < 0)
+ break; /* not a symlink anymore */
- if (is_absolute_path(link)) {
+ if (is_absolute_path(link.buf)) {
/* absolute path simply replaces p */
- if (link_len < s)
- strcpy(p, link);
- else {
- warning("%s: symlink too long", p);
- return p;
- }
+ strbuf_reset(&p);
+ strbuf_addbuf(&p, &link);
} else {
/*
* link is a relative path, so I must replace the
* last element of p with it.
*/
- char *r = (char *)last_path_elm(p);
- if (r - p + link_len < s)
- strcpy(r, link);
- else {
- warning("%s: symlink too long", p);
- return p;
- }
+ char *r = (char *)last_path_elm(p.buf);
+ strbuf_setlen(&p, r - p.buf);
+ strbuf_addbuf(&p, &link);
}
}
- return p;
+ strbuf_release(&link);
+ return p.buf;
}
--
2.1.0.rc0.78.gc0d8480
next prev parent reply other threads:[~2014-07-31 13:43 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-18 13:08 [PATCH] Make locked paths absolute when current directory is changed Nguyễn Thái Ngọc Duy
2014-07-18 17:47 ` Junio C Hamano
2014-07-19 12:40 ` Duy Nguyen
2014-07-18 20:44 ` Johannes Sixt
2014-07-20 12:13 ` [PATCH v2 1/2] lockfile.c: remove PATH_MAX limitation (except in resolve_symlink) Nguyễn Thái Ngọc Duy
2014-07-20 12:13 ` [PATCH v2 2/2] Make locked paths absolute when current directory is changed Nguyễn Thái Ngọc Duy
2014-07-21 13:27 ` Ramsay Jones
2014-07-21 13:47 ` Duy Nguyen
2014-07-21 14:23 ` Ramsay Jones
2014-07-21 17:04 ` Junio C Hamano
2014-07-23 11:55 ` Duy Nguyen
2014-07-31 3:01 ` Yue Lin Ho
2014-07-31 9:58 ` Duy Nguyen
2014-07-20 12:47 ` [PATCH v2 1/2] lockfile.c: remove PATH_MAX limitation (except in resolve_symlink) Philip Oakley
2014-07-20 12:50 ` Duy Nguyen
2014-07-31 13:43 ` [PATCH v3 0/3] Keep .lock file paths absolute Nguyễn Thái Ngọc Duy
2014-07-31 13:43 ` [PATCH v3 1/3] lockfile.c: remove PATH_MAX limitation (except in resolve_symlink) Nguyễn Thái Ngọc Duy
2014-08-01 16:53 ` Junio C Hamano
2014-08-01 17:55 ` Junio C Hamano
2014-08-02 18:13 ` Torsten Bögershausen
2014-08-04 10:13 ` Duy Nguyen
2014-08-04 17:42 ` Junio C Hamano
2014-08-05 16:10 ` Michael Haggerty
2014-09-03 8:00 ` Yue Lin Ho
2014-08-01 17:34 ` Junio C Hamano
2014-07-31 13:43 ` Nguyễn Thái Ngọc Duy [this message]
2014-07-31 13:43 ` [PATCH v3 3/3] lockfile.c: store absolute path Nguyễn Thái Ngọc Duy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1406814214-21725-3-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=ramsay@ramsay1.demon.co.uk \
--cc=yuelinho777@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).