diff options
| author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | 2026-01-09 20:05:08 +0000 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2026-01-09 18:28:36 -0800 |
| commit | 21f368daab677724ca1a200c22d65b64b15117b5 (patch) | |
| tree | fa3dad50e4f4d41bced646bbe86327ee42771d75 /contrib/persistent-https | |
| parent | strbuf_readlink(): avoid calling `readlink()` twice in corner-cases (diff) | |
| download | git-21f368daab677724ca1a200c22d65b64b15117b5.tar.gz git-21f368daab677724ca1a200c22d65b64b15117b5.zip | |
strbuf_readlink(): support link targets that exceed 2*PATH_MAX
The `strbuf_readlink()` function refuses to read link targets that
exceed 2*PATH_MAX (even if a sufficient size was specified by the
caller).
The reason that that limit is 2*PATH_MAX instead of PATH_MAX is that
the symlink targets do not need to be normalized. After running
`ln -s a/../a/../a/../a/../b c`, the target of the symlink `c` will not
be normalized to `b` but instead be much longer. As such, symlink
targets' lengths can far exceed PATH_MAX.
They are frequently much longer than 2*PATH_MAX on Windows, which
actually supports paths up to 32,767 characters, but sets PATH_MAX to
260 for backwards compatibility. For full details, see
https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation
Let's just hard-code the limit used by `strbuf_readlink()` to 32,767 and
make it independent of the current platform's PATH_MAX.
Based-on-a-patch-by: Karsten Blees <karsten.blees@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'contrib/persistent-https')
0 files changed, 0 insertions, 0 deletions
