]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: mail-duplicate - Restructure mail_duplicate_read_db_file() to make sure...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Fri, 24 Sep 2021 08:39:43 +0000 (10:39 +0200)
committerStephan Bosch <stephan.bosch@open-xchange.com>
Fri, 24 Sep 2021 08:42:53 +0000 (10:42 +0200)
Found by Coverity.

src/lib-storage/mail-duplicate.c

index c54371d8f56b24cf519dae67137ee7a8ac2e4b81..ff4fa5630b427f0238843f7929e7a18079245e49 100644 (file)
@@ -331,27 +331,16 @@ mail_duplicate_read_records(struct mail_duplicate_transaction *trans,
        return 0;
 }
 
-static int mail_duplicate_read_db_file(struct mail_duplicate_transaction *trans)
+static int
+mail_duplicate_read_db_from_fd(struct mail_duplicate_transaction *trans, int fd)
 {
        struct istream *input;
        struct mail_duplicate_file_header hdr;
        const unsigned char *data;
        size_t size;
-       int fd;
        struct stat st;
        unsigned int record_size = 0;
 
-       e_debug(trans->event, "Reading %s", trans->path);
-
-       fd = open(trans->path, O_RDONLY);
-       if (fd == -1) {
-               if (errno == ENOENT)
-                       return 0;
-               e_error(trans->event,
-                       "open(%s) failed: %m", trans->path);
-               return -1;
-       }
-
        if (fstat(fd, &st) < 0) {
                e_error(trans->event,
                        "stat(%s) failed: %m", trans->path);
@@ -380,11 +369,31 @@ static int mail_duplicate_read_db_file(struct mail_duplicate_transaction *trans)
        } T_END;
 
        i_stream_unref(&input);
+       return 0;
+}
+
+static int mail_duplicate_read_db_file(struct mail_duplicate_transaction *trans)
+{
+       int fd, ret;
+
+       e_debug(trans->event, "Reading %s", trans->path);
+
+       fd = open(trans->path, O_RDONLY);
+       if (fd == -1) {
+               if (errno == ENOENT)
+                       return 0;
+               e_error(trans->event,
+                       "open(%s) failed: %m", trans->path);
+               return -1;
+       }
+
+       ret = mail_duplicate_read_db_from_fd(trans, fd);
+
        if (close(fd) < 0) {
                e_error(trans->event,
                        "close(%s) failed: %m", trans->path);
        }
-       return 0;
+       return ret;
 }
 
 static void mail_duplicate_read(struct mail_duplicate_transaction *trans)