]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Add some fixes (errors, mem leak, error report PDU)
authorpcarana <pc.moreno2099@gmail.com>
Fri, 29 Mar 2019 21:38:36 +0000 (15:38 -0600)
committerpcarana <pc.moreno2099@gmail.com>
Fri, 29 Mar 2019 21:38:36 +0000 (15:38 -0600)
-Return errors as negative
-Fix mem leak at clients.c
-Send received PDU header at error PDU when client session ID doesn't match server's session ID

src/array_list.h
src/clients.c
src/configuration.c
src/csv.c
src/line_file.c
src/rtr/pdu_handler.c
src/rtr/pdu_sender.c
src/rtr/primitive_reader.c

index 882fb52f6ae906e149e516e1b27b0a9af04da56a..ff00c9344434c338983448ecc183f43b0a702be0 100644 (file)
@@ -48,7 +48,7 @@
                            * sizeof(elem_type));                       \
                        if (tmp == NULL) {                              \
                                warn("Couldn't realloc array");         \
-                               return errno;                           \
+                               return -ENOMEM;                         \
                        }                                               \
                        list->array = tmp;                              \
                }                                                       \
index 45c9144c49860b6bc6a8650f6fc45a809e2ec8ca..0dcfb8f4b74347658795633531e9652e969560f4 100644 (file)
@@ -153,6 +153,7 @@ clients_forget(int fd)
        read_unlock(&rlock, &wlock, &rcounter);
 
        sem_wait(&wlock);
+       clientsdb_cleanup(&clients_db, client_destroy);
        clients_db = *new_db;
        sem_post(&wlock);
        free(new_db);
index ad4fc2f359d598fbe96c463629b3851449a58798..71089aaa6dda127e7801bde883380c6339d3eeeb 100644 (file)
@@ -348,13 +348,13 @@ init_addrinfo(char const *hostname, char const *service)
                warnx("Could not infer a bindable address out of address '%s' and port '%s': %s",
                    (hostname != NULL) ? hostname : "any", service,
                    gai_strerror(error));
-               return error;
+               return -error;
        }
 
        config.port = strdup(service);
        if (config.port == NULL) {
                warn( "'%s' couldn't be allocated.", OPTNAME_LISTEN_PORT);
-               return errno;
+               return -errno;
        }
 
        return 0;
index ea89100eab4e6b1756e15f1ba5244c44715d9072..00cf962c01ec3b40526bbaf14b5f12607f04313a 100644 (file)
--- a/src/csv.c
+++ b/src/csv.c
@@ -90,7 +90,7 @@ add_vrp(char *line, struct vrplist *vrplist)
 
        line_copy = malloc(strlen(line) + 1);
        if (line_copy == NULL) {
-               error = errno;
+               error = -errno;
                warn("Out of memory allocating CSV line copy");
                goto error;
        }
@@ -228,8 +228,9 @@ load_vrps_file(bool check_update, bool *updated)
        /* Look for the last update date */
        error = stat(location, &attr);
        if (error) {
-               warn("Couldn't get last modified date of %s, skip update",
+               warnx("Couldn't get last modified date of %s, skip update",
                        location);
+               error = -ENOENT;
                goto end;
        }
 
index 923fe0ab3e35a60b5d5888167e670f17300b9c99..c995e4babd1ff68a9ecc67dbf01d5abd28ef9091 100644 (file)
@@ -18,7 +18,6 @@ int
 lfile_open(const char *file_name, struct line_file **result)
 {
        struct line_file *lfile;
-       int error;
 
        lfile = malloc(sizeof(struct line_file));
        if (lfile == NULL)
@@ -26,9 +25,8 @@ lfile_open(const char *file_name, struct line_file **result)
 
        lfile->file = fopen(file_name, "r");
        if (lfile->file == NULL) {
-               error = errno;
                free(lfile);
-               return error;
+               return -errno;
        }
        lfile->file_name = file_name;
        lfile->offset = 0;
@@ -59,7 +57,6 @@ lfile_read(struct line_file *lfile, char **result)
        size_t alloc_len;
        ssize_t len;
        ssize_t i;
-       int error;
 
        /*
         * Note to myself:
@@ -99,21 +96,18 @@ lfile_read(struct line_file *lfile, char **result)
        len = getline(&string, &alloc_len, lfile->file);
 
        if (len == -1) {
-               error = errno;
                free(string);
                *result = NULL;
                if (ferror(lfile->file)) {
-                       warnx("Error while reading file: %s",
-                           strerror(error));
-                       return error;
+                       warn("Error while reading file");
+                       return -errno;
                }
                if (feof(lfile->file))
                        return 0;
 
-               error = -EINVAL;
                warnx("Supposedly unreachable code reached. ferror:%d feof:%d",
                    ferror(lfile->file), feof(lfile->file));
-               return error;
+               return -EINVAL;
        }
 
        lfile->offset += len;
@@ -125,11 +119,10 @@ lfile_read(struct line_file *lfile, char **result)
         */
        for (i = 0; i < len; i++) {
                if (string[i] == '\0') {
-                       error = -EINVAL;
                        warnx("File '%s' has an illegal null character in its body. Please remove it.",
                            lfile_name(lfile));
                        free(string);
-                       return error;
+                       return -EINVAL;
                }
        }
 
index f60d08eea44139c34d72ca534eac8c4e9543575f..0ec9c4bf9d49b01d109de222017d3842f3b0fd63 100644 (file)
@@ -65,8 +65,8 @@ handle_serial_query_pdu(int fd, void *pdu)
        version = received->header.protocol_version;
        session_id = get_current_session_id(version);
        if (received->header.session_id != session_id)
-               return err_pdu_send(fd, version, ERR_PDU_CORRUPT_DATA, NULL,
-                   NULL);
+               return err_pdu_send(fd, version, ERR_PDU_CORRUPT_DATA,
+                   &received->header, NULL);
 
        current_serial = get_last_serial_number();
        init_sender_common(&common, fd, version, &session_id,
index df4a7ca71ebeda6592145b199b9d0f491dbe0fa4..421feddc9e59a98decb5eed6fd4c0e0dbe8e1abe 100644 (file)
@@ -95,7 +95,7 @@ send_response(int fd, char *data, size_t data_len)
        free_buffer(&buffer);
        if (error < 0) {
                warnx("Error sending response");
-               return error;
+               return -EINVAL;
        }
 
        return 0;
@@ -208,7 +208,7 @@ send_payload_pdus(struct sender_common *common)
        vrps = malloc(sizeof(struct vrp));
        if (vrps == NULL) {
                warn("Couldn't allocate VRPs to send PDUs");
-               return -errno;
+               return -ENOMEM;
        }
        len = get_vrps_delta(common->start_serial, common->end_serial, &vrps);
        if (len == 0)
index 2a2e8015bb46060999b458328e1be54c277207f5..dd264d48c29917f3c1cb2e62dd051d34b3e05d5a 100644 (file)
@@ -16,14 +16,12 @@ read_exact(int fd, unsigned char *buffer, size_t buffer_len)
 {
        ssize_t read_result;
        size_t offset;
-       int err;
 
        for (offset = 0; offset < buffer_len; offset += read_result) {
                read_result = read(fd, &buffer[offset], buffer_len - offset);
                if (read_result == -1) {
-                       err = errno;
                        warn("Client socket read interrupted");
-                       return err;
+                       return -errno;
                }
                if (read_result == 0) {
                        warnx("Stream ended mid-PDU.");