libdlogutil: leak safety 08/229808/1
authorMichal Bloch <m.bloch@samsung.com>
Fri, 3 Apr 2020 17:12:57 +0000 (19:12 +0200)
committerMichal Bloch <m.bloch@samsung.com>
Fri, 3 Apr 2020 17:12:57 +0000 (19:12 +0200)
Change-Id: I9c18dfa4c0ba91b98e50ff5f43f111baa332680b
Signed-off-by: Michal Bloch <m.bloch@samsung.com>
src/libdlogutil/fd_info.c
src/libdlogutil/logretrieve.c
src/tests/logutil.c

index f23e83c..b4c0014 100644 (file)
@@ -82,8 +82,7 @@ int fdi_push_log(struct fd_info *fdi, struct sort_vector *logs, dlogutil_entry_s
        assert(logs);
        assert(filter);
        assert(entry_out);
-
-       *entry_out = NULL;
+       assert(!*entry_out);
 
        dlogutil_entry_s *temp = fdi->ops->extract_entry(fdi);
        if (!temp)
index d9efd9f..1ea38ec 100644 (file)
@@ -144,8 +144,8 @@ int put_logs_into_vector(struct fd_info **data_fds, int fd_count, struct sort_ve
        assert(logs);
        assert(filter);
        assert(entry_out);
+       assert(!*entry_out);
 
-       *entry_out = NULL;
        struct fd_info *best_fdi;
        do {
                best_fdi = find_earliest_log(data_fds, fd_count, logs->sort_by);
@@ -243,6 +243,8 @@ int dlogutil_state_init(dlogutil_state_s *state, struct fd_info ***data_fds_ptr,
 
 static bool flush_single_log(dlogutil_state_s *state, dlogutil_entry_s **out)
 {
+       assert(!*out);
+
        if (state->flush_target >= LONG_MAX
        ||  sort_vector_empty(&state->logs))
                return false;
@@ -259,6 +261,8 @@ static bool flush_single_log(dlogutil_state_s *state, dlogutil_entry_s **out)
 
 static bool handle_flush(dlogutil_state_s *state, dlogutil_entry_s **out)
 {
+       assert(!*out);
+
        bool const r = flush_single_log(state, out);
        if (!r)
                state->flush_target = LONG_MAX;
@@ -351,7 +355,8 @@ static void set_flush_target(dlogutil_state_s *state, bool all_buffers_empty)
  */
 int do_print_once(dlogutil_state_s *state, int timeout, dlogutil_entry_s **out)
 {
-       *out = NULL;
+       assert(!*out);
+
        while (state->epoll_cnt > 0) {
                if (handle_flush(state, out))
                        return 0;
@@ -400,7 +405,7 @@ int do_print_once(dlogutil_state_s *state, int timeout, dlogutil_entry_s **out)
 int do_print(dlogutil_state_s *state, dlogutil_entry_cb callback, void *userdata)
 {
        while (true) {
-               dlogutil_entry_s *out;
+               dlogutil_entry_s *out = NULL;
                int r;
                do
                        r = do_print_once(state, DEFAULT_EPOLL_TIMEOUT, &out);
index 66d20db..17c7b4a 100644 (file)
@@ -143,7 +143,7 @@ int main()
        while (!sort_vector_empty(&sv))
                sort_vector_pop(&sv);
 
-       dlogutil_entry_s *vector_overflown;
+       dlogutil_entry_s *vector_overflown = NULL;
        assert(put_logs_into_vector(fds, 0, &sv, (dlogutil_filter_options_s *)0xEEE, &vector_overflown) == 1);
        assert(!vector_overflown);