main: fix some resource leaks
authorHauke Mehrtens <hauke@hauke-m.de>
Mon, 2 Sep 2019 19:34:15 +0000 (21:34 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Fri, 20 Sep 2019 19:37:40 +0000 (21:37 +0200)
This fixes some resources leaks mostly in error patches.

Coverity: #1330236, #1330237, #1330238
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
main.c

diff --git a/main.c b/main.c
index 3536443d5e3d21f83cc8bd6dc40f05ccd658a98b..ef47b282a7ccec7f02d8d42f927f2239fffae467 100644 (file)
--- a/main.c
+++ b/main.c
@@ -129,6 +129,7 @@ get_file(const char *filename, char *buf, int buflen)
 
        len = fread(buf, 1, buflen - 1, f);
        buf[len] = 0;
 
        len = fread(buf, 1, buflen - 1, f);
        buf[len] = 0;
+       fclose(f);
 }
 
 static bool
 }
 
 static bool
@@ -171,6 +172,7 @@ static int verify(const char *msgfile)
        if (!get_base64_file(sigfile, &sig, sizeof(sig), buf, sizeof(buf)) ||
            memcmp(sig.pkalg, "Ed", 2) != 0) {
                fprintf(stderr, "Failed to decode signature\n");
        if (!get_base64_file(sigfile, &sig, sizeof(sig), buf, sizeof(buf)) ||
            memcmp(sig.pkalg, "Ed", 2) != 0) {
                fprintf(stderr, "Failed to decode signature\n");
+               fclose(f);
                return 1;
        }
 
                return 1;
        }
 
@@ -183,6 +185,7 @@ static int verify(const char *msgfile)
        if (!get_base64_file(pubkeyfile, &pkey, sizeof(pkey), buf, sizeof(buf)) ||
            memcmp(pkey.pkalg, "Ed", 2) != 0) {
                fprintf(stderr, "Failed to decode public key\n");
        if (!get_base64_file(pubkeyfile, &pkey, sizeof(pkey), buf, sizeof(buf)) ||
            memcmp(pkey.pkalg, "Ed", 2) != 0) {
                fprintf(stderr, "Failed to decode public key\n");
+               fclose(f);
                return 1;
        }
 
                return 1;
        }
 
@@ -292,11 +295,16 @@ static int generate(void)
        FILE *f;
 
        f = fopen("/dev/urandom", "r");
        FILE *f;
 
        f = fopen("/dev/urandom", "r");
-       if (!f ||
-           fread(skey.fingerprint, sizeof(skey.fingerprint), 1, f) != 1 ||
+       if (!f) {
+               fprintf(stderr, "Can't open /dev/urandom\n");
+               return 1;
+       }
+
+       if (fread(skey.fingerprint, sizeof(skey.fingerprint), 1, f) != 1 ||
            fread(skey.seckey, EDSIGN_SECRET_KEY_SIZE, 1, f) != 1 ||
            fread(skey.salt, sizeof(skey.salt), 1, f) != 1) {
                fprintf(stderr, "Can't read data from /dev/urandom\n");
            fread(skey.seckey, EDSIGN_SECRET_KEY_SIZE, 1, f) != 1 ||
            fread(skey.salt, sizeof(skey.salt), 1, f) != 1) {
                fprintf(stderr, "Can't read data from /dev/urandom\n");
+               fclose(f);
                return 1;
        }
        if (f)
                return 1;
        }
        if (f)