git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] convert bare readlink to strbuf_readlink

From
Jeff King <peff@peff.net>
Date
May 25, 2009, 10:46 UTC
Message-ID
<20090525104609.GA26895@coredump.intra.peff.net>
In-Reply-To
<20090522153426.GA10390@coredump.intra.peff.net>

This particular readlink call never NUL-terminated its result, making it a potential source of bugs (though there is no bug now, as it currently always respects the length field). Let's just switch it to strbuf_readlink which is shorter and less error-prone.

Signed-off-by: Jeff King <peff@peff.net>
---
This is a re-post with the missing strbuf_release added.

I am not overly married to this patch, so if you think it is code churn, please just say so and drop it. I am just clearing out my "clean up and submit" queue. :)

 diff.c |   11 ++++-------
 1 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/diff.c b/diff.c
index f06876b..dcfbcb0 100644
--- a/diff.c
+++ b/diff.c
@@ -2014,18 +2014,15 @@ static struct diff_tempfile *prepare_temp_file(const char *name,
 			die("stat(%s): %s", name, strerror(errno));
 		}
 		if (S_ISLNK(st.st_mode)) {
-			int ret;
-			char buf[PATH_MAX + 1]; /* ought to be SYMLINK_MAX */
-			ret = readlink(name, buf, sizeof(buf));
-			if (ret < 0)
+			struct strbuf sb = STRBUF_INIT;
+			if (strbuf_readlink(&sb, name, st.st_size) < 0)
 				die("readlink(%s)", name);
-			if (ret == sizeof(buf))
-				die("symlink too long: %s", name);
-			prep_temp_blob(name, temp, buf, ret,
+			prep_temp_blob(name, temp, sb.buf, sb.len,
 				       (one->sha1_valid ?
 					one->sha1 : null_sha1),
 				       (one->sha1_valid ?
 					one->mode : S_IFLNK));
+			strbuf_release(&sb);
 		}
 		else {
 			/* we can borrow from the file in the work tree */
-- 
1.6.3.1.250.g01b8b.dirty
Previous: Jeff KingNext: Junio C Hamano
Message 14 of 16 in “setup_revisions(): do not access outside argv”
  1. setup_revisions(): do not access outside argvNguyễn Thái Ngọc Duy, May 20, 2009
  2. Johannes SixtMay 20, 2009
  3. Nguyen Thai Ngoc DuyMay 20, 2009
  4. Junio C HamanoMay 21, 2009
  5. Miles BaderMay 21, 2009
  6. Nguyen Thai Ngoc DuyMay 21, 2009
  7. Jeff KingMay 21, 2009
  8. Thomas JaroschMay 21, 2009
  9. Jeff KingMay 22, 2009
  10. Jeff KingMay 22, 2009
  11. Thomas JaroschMay 22, 2009
  12. Brandon CaseyMay 22, 2009
  13. Jeff KingMay 22, 2009
  14. convert bare readlink to strbuf_readlinkJeff King, May 25, 2009
  15. Junio C HamanoMay 25, 2009
  16. Jeff KingJun 2, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.