mirror of
https://github.com/git/git.git
synced 2026-01-19 07:04:49 +00:00
strbuf_readlink: don't call readlink twice if hint is the exact link size
strbuf_readlink() calls readlink() twice if the hint argument specifies the exact size of the link target (e.g. by passing stat.st_size as returned by lstat()). This is necessary because 'readlink(..., hint) == hint' could mean that the buffer was too small. Use hint + 1 as buffer size to prevent this. Signed-off-by: Karsten Blees <blees@dcon.de>
This commit is contained in:
committed by
Johannes Schindelin
parent
1bf44a19df
commit
626fd82747
6
strbuf.c
6
strbuf.c
@@ -480,12 +480,12 @@ int strbuf_readlink(struct strbuf *sb, const char *path, size_t hint)
|
||||
while (hint < STRBUF_MAXLINK) {
|
||||
ssize_t len;
|
||||
|
||||
strbuf_grow(sb, hint);
|
||||
len = readlink(path, sb->buf, hint);
|
||||
strbuf_grow(sb, hint + 1);
|
||||
len = readlink(path, sb->buf, hint + 1);
|
||||
if (len < 0) {
|
||||
if (errno != ERANGE)
|
||||
break;
|
||||
} else if (len < hint) {
|
||||
} else if (len <= hint) {
|
||||
strbuf_setlen(sb, len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user