[PATCH 4/5] strbuf_readlink(): support link targets that exceed PATH_MAX
- From
Karsten Blees via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Dec 16, 2025, 15:33 UTC
- Message-ID
- <db1feb2293d20532f9468ab63ede43d4fc620203.1765899229.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.2017.git.1765899229.gitgitgadget@gmail.com>
From: Karsten Blees <blees@dcon.de>
The `strbuf_readlink()` function refuses to read link targets that exceed PATH_MAX (even if a sufficient size was specified by the caller).
As some platforms (*cough* Windows *cough*) support longer paths, remove this restriction (similar to `strbuf_getcwd()`).
Signed-off-by: Karsten Blees <blees@dcon.de> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> --- strbuf.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/strbuf.c b/strbuf.c index 44a8f6a554..fa4e30f112 100644 --- a/strbuf.c +++ b/strbuf.c @@ -566,8 +566,6 @@ ssize_t strbuf_write(struct strbuf *sb, FILE *f) return sb->len ? fwrite(sb->buf, 1, sb->len, f) : 0; } -#define STRBUF_MAXLINK (2*PATH_MAX) - int strbuf_readlink(struct strbuf *sb, const char *path, size_t hint) { size_t oldalloc = sb->alloc; @@ -575,7 +573,7 @@ int strbuf_readlink(struct strbuf *sb, const char *path, size_t hint) if (hint < 32) hint = 32; - while (hint < STRBUF_MAXLINK) { + for (;;) { ssize_t len; strbuf_grow(sb, hint + 1);
-- gitgitgadget