Fix Coverity CIDs: 1220259 1364687 (and discarded 1220496) and added more checks...
authorwwp <wwp@free.fr>
Tue, 10 Jan 2017 09:10:05 +0000 (10:10 +0100)
committerwwp <wwp@free.fr>
Tue, 10 Jan 2017 09:10:05 +0000 (10:10 +0100)
values.

src/plugins/archive/libarchive_archive.c
src/plugins/managesieve/managesieve.c

index 7aa9595a66f375cdeb885073271461377d6badc1..a348c546a7264e34b273bf92f588de78be68fbd9 100644 (file)
@@ -591,34 +591,37 @@ const gchar* archive_create(const char* archive_name, GSList* files,
                                perror("open file");
                        }
                        else {
-                               lstat(filename, &st);
-                               archive_entry_copy_stat(entry, &st);
-                               archive_entry_set_pathname(entry, filename);
-                               if (S_ISLNK(st.st_mode)) {
-                                       buf = NULL;
-                                       buf = malloc(PATH_MAX + 1);
-                                       if ((len = readlink(filename, buf, PATH_MAX)) < 0)
-                                               perror("error in readlink");
-                                       else
-                                               buf[len] = '\0';
-                                       archive_entry_set_symlink(entry, buf);
-                                       g_free(buf);
-                                       archive_entry_set_size(entry, 0);
-                                       archive_write_header(arch, entry);
-                               }
-                               else {
-                                       if (archive_write_header(arch, entry) != ARCHIVE_OK)
-                                               g_warning("%s", archive_error_string(arch));
-                                       buf = NULL;
-                                       buf = malloc(READ_BLOCK_SIZE);
-                                       len = read(fd, buf, READ_BLOCK_SIZE);
-                                       while (len > 0) {
-                                               if (archive_write_data(arch, buf, len) == -1)
+                               if (lstat(filename, &st) == -1) {
+                                       perror("lstat file");
+                               } else {
+                                       archive_entry_copy_stat(entry, &st);
+                                       archive_entry_set_pathname(entry, filename);
+                                       if (S_ISLNK(st.st_mode)) {
+                                               if ((buf = malloc(PATH_MAX + 1)) != NULL) {
+                                                       if ((len = readlink(filename, buf, PATH_MAX)) < 0)
+                                                               perror("error in readlink");
+                                                       else
+                                                               buf[len] = '\0';
+                                                       archive_entry_set_symlink(entry, buf);
+                                                       g_free(buf);
+                                                       archive_entry_set_size(entry, 0);
+                                                       archive_write_header(arch, entry);
+                                               }
+                                       }
+                                       else {
+                                               if (archive_write_header(arch, entry) != ARCHIVE_OK)
                                                        g_warning("%s", archive_error_string(arch));
-                                               memset(buf, 0, READ_BLOCK_SIZE);
-                                               len = read(fd, buf, READ_BLOCK_SIZE);
+                                               if ((buf = malloc(READ_BLOCK_SIZE)) != NULL) {
+                                                       len = read(fd, buf, READ_BLOCK_SIZE);
+                                                       while (len > 0) {
+                                                               if (archive_write_data(arch, buf, len) == -1)
+                                                                       g_warning("%s", archive_error_string(arch));
+                                                               memset(buf, 0, READ_BLOCK_SIZE);
+                                                               len = read(fd, buf, READ_BLOCK_SIZE);
+                                                       }
+                                                       g_free(buf);
+                                               }
                                        }
-                                       g_free(buf);
                                }
                                close(fd);
                                archive_entry_free(entry);
index c839f7325256fbef4b9859e490e886084b8c4506..e7b53f529a9db6c6d12bef1ebb8e2a0a3221c4a7 100644 (file)
@@ -690,9 +690,10 @@ static gint sieve_session_recv_msg(Session *session, const gchar *msg)
                        if (sieve_session->tls_init_done == FALSE &&
                                        sieve_session->config->tls_type != SIEVE_TLS_NO) {
                                if (sieve_session->capability.starttls) {
-                                       log_print(LOG_PROTOCOL, "Sieve> STARTTLS\n");
-                                       session_send_msg(session, "STARTTLS");
-                                       sieve_session->state = SIEVE_STARTTLS;
+                                       if (session_send_msg(session, "STARTTLS") < 0)
+                                               sieve_session->state = SIEVE_ERROR;
+                                       else
+                                               sieve_session->state = SIEVE_STARTTLS;
                                } else if (sieve_session->config->tls_type == SIEVE_TLS_YES) {
                                        log_warning(LOG_PROTOCOL, "Sieve: does not support STARTTLS\n");
                                        sieve_session->state = SIEVE_ERROR;
@@ -1146,7 +1147,8 @@ static void sieve_queue_send(SieveSession *session, SieveState next_state,
                session->state = next_state;
                log_send(session, cmd);
                if (session_send_msg(SESSION(session), cmd->msg) < 0) {
-                       /* error */
+                       log_warning(LOG_PROTOCOL,
+                               _("sending error on Sieve session: %s\n"), cmd->msg);
                }
        }
 }