提交 fa1912c8 编写于 作者: R René Scharfe 提交者: Junio C Hamano

server-info: avoid calling fclose(3) twice in update_info_file()

If an error occurs when or after closing the stream we call fclose(3)
again in the error handler.  The second call can exhibit undefined
behavior, so make sure to call fclose(3) at most once.  Also avoid
calling close(2) after fd has been successfully associated with the
stream, as fclose(3) has become responsible for doing that beyond
this point.

Found with Cppcheck.
Signed-off-by: NRene Scharfe <l.s.r@web.de>
Reviewed-by: NJeff King <peff@peff.net>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 be686f03
......@@ -14,19 +14,21 @@ static int update_info_file(char *path, int (*generate)(FILE *))
char *tmp = mkpathdup("%s_XXXXXX", path);
int ret = -1;
int fd = -1;
FILE *fp = NULL;
FILE *fp = NULL, *to_close;
safe_create_leading_directories(path);
fd = git_mkstemp_mode(tmp, 0666);
if (fd < 0)
goto out;
fp = fdopen(fd, "w");
to_close = fp = fdopen(fd, "w");
if (!fp)
goto out;
fd = -1;
ret = generate(fp);
if (ret)
goto out;
if (fclose(fp))
fp = NULL;
if (fclose(to_close))
goto out;
if (adjust_shared_perm(tmp) < 0)
goto out;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册