]> git.ipfire.org Git - thirdparty/git.git/commitdiff
test-mktemp: plug memory and descriptor leaks
authorJeff King <peff@peff.net>
Tue, 18 Nov 2025 12:21:24 +0000 (07:21 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 18 Nov 2025 18:05:14 +0000 (10:05 -0800)
We test xmkstemp() in our helper by just calling:

  xmkstemp(xstrdup(argv[1]));

This leaks both the copied string as well as the descriptor returned by
the function. In practice this isn't a big deal, since we immediately
exit the program, but:

  1. LSan will complain about the memory leak. The only reason we did
     not notice this in our leak-checking builds is that both of the
     callers in the test suite (both in t0070) pass a broken template
     (and expect failure). So the function calls die() before we can
     actually leak.

     But it's an accident waiting to happen if anybody adds a call which
     succeeds.

  2. Coverity complains about the descriptor leak. There's a long list
     of uninteresting or false positives in Coverity's results, but
     since we're here we might as well fix it, too.

I didn't bother adding a new test that triggers the leak. It's not even
in real production code, but just in the test-helper itself.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/helper/test-mktemp.c

index 229068894029338c52f5d0b9828c442658be67e5..da195640a9dcc871b6aab165ce244f0c1140b111 100644 (file)
@@ -6,10 +6,16 @@
 
 int cmd__mktemp(int argc, const char **argv)
 {
+       char *template;
+       int fd;
+
        if (argc != 2)
                usage("Expected 1 parameter defining the temporary file template");
+       template = xstrdup(argv[1]);
 
-       xmkstemp(xstrdup(argv[1]));
+       fd = xmkstemp(template);
 
+       close(fd);
+       free(template);
        return 0;
 }