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

[PATCH v2] builtin/bugreport.c: use thread-safe localtime_r()

From
Taylor Blau <me@ttaylorr.com>
Date
Dec 1, 2020, 00:30 UTC
Message-ID
<73eb4965807ea2fdf94f815a8f8a2b036296ecca.1606782566.git.me@ttaylorr.com>
In-Reply-To
<27fc158339c91f56210f00dae9015da1d6c781ec.1606777520.git.me@ttaylorr.com>

To generate its filename, the 'git bugreport' builtin asks the system for the current time with 'localtime()'. Since this uses a shared buffer, it is not thread-safe.

Even though 'git bugreport' is not multi-threaded, using localtime() can trigger some static analysis tools to complain, and a quick

    $ git grep -oh 'localtime\(_.\)\?' -- **/*.c | sort | uniq -c

shows that the only usage of the thread-unsafe 'localtime' is in a piece of documentation.

So, convert this instance to use the thread-safe version for consistency, and to appease some analysis tools.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
How embarrassing: I forgot my sign-off on the previous message. The
contents in this version are unchanged, but this one includes my
sign-off.
 builtin/bugreport.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/builtin/bugreport.c b/builtin/bugreport.c
index 3ad4b9b62e..ad3cc9c02f 100644
--- a/builtin/bugreport.c
+++ b/builtin/bugreport.c
@@ -125,6 +125,7 @@ int cmd_bugreport(int argc, const char **argv, const char *prefix)
 	struct strbuf report_path = STRBUF_INIT;
 	int report = -1;
 	time_t now = time(NULL);
+	struct tm tm;
 	char *option_output = NULL;
 	char *option_suffix = "%Y-%m-%d-%H%M";
 	const char *user_relative_path = NULL;
@@ -147,7 +148,7 @@ int cmd_bugreport(int argc, const char **argv, const char *prefix)
 	strbuf_complete(&report_path, '/');

 	strbuf_addstr(&report_path, "git-bugreport-");
-	strbuf_addftime(&report_path, option_suffix, localtime(&now), 0, 0);
+	strbuf_addftime(&report_path, option_suffix, localtime_r(&now, &tm), 0, 0);
 	strbuf_addstr(&report_path, ".txt");

 	switch (safe_create_leading_directories(report_path.buf)) {
--
2.29.2.533.g07db1f5344
Previous: Taylor BlauNext: Jeff King
Message 2 of 14 in “builtin/bugreport.c: use thread-safe localtime_r()”
  1. builtin/bugreport.c: use thread-safe localtime_r()Taylor Blau, Nov 30, 2020
  2. builtin/bugreport.c: use thread-safe localtime_r()Taylor Blau, Dec 1, 2020
  3. Jeff KingDec 1, 2020
  4. Eric SunshineDec 1, 2020
  5. Junio C HamanoDec 1, 2020
  6. Taylor BlauDec 1, 2020
  7. 1/2 banned.h: mark non-reentrant gmtime, etc as bannedJunio C Hamano, Dec 1, 2020
  8. 2/2 banned.h: mark ctime_r() and asctime_r() as banned.Junio C Hamano, Dec 1, 2020
  9. Eric SunshineDec 1, 2020
  10. Junio C HamanoDec 1, 2020
  11. Taylor BlauDec 1, 2020
  12. SZEDER GáborDec 6, 2020
  13. Jeff KingDec 2, 2020
  14. Eric SunshineDec 1, 2020

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.