Fix: trace-chunk: dereference after NULL check
[lttng-tools.git] / src / common / trace-chunk.c
index 63bfb6c523add6a4058d3867a39581274cb55374..ea952220b880ad4a12e106a13c90973cfdda1d19 100644 (file)
@@ -766,7 +766,7 @@ enum lttng_trace_chunk_status lttng_trace_chunk_rename_path_no_lock(
                goto skip_move;
        }
 
-       if (old_path[0] != '\0' && path[0] != '\0') {
+       if (old_path && old_path[0] != '\0' && path[0] != '\0') {
                /* Rename chunk directory. */
                ret = lttng_directory_handle_rename_as_user(
                        chunk->session_output_directory,
@@ -804,7 +804,7 @@ enum lttng_trace_chunk_status lttng_trace_chunk_rename_path_no_lock(
                 */
                chunk->chunk_directory = rename_directory;
                rename_directory = NULL;
-       } else if (old_path[0] == '\0') {
+       } else if (old_path && old_path[0] == '\0') {
                size_t i, count = lttng_dynamic_pointer_array_get_count(
                                &chunk->top_level_directories);
 
@@ -859,7 +859,7 @@ enum lttng_trace_chunk_status lttng_trace_chunk_rename_path_no_lock(
                 */
                chunk->chunk_directory = rename_directory;
                rename_directory = NULL;
-       } else {
+       } else if (old_path) {
                size_t i, count = lttng_dynamic_pointer_array_get_count(
                                &chunk->top_level_directories);
                const bool reference_acquired = lttng_directory_handle_get(
@@ -908,18 +908,18 @@ enum lttng_trace_chunk_status lttng_trace_chunk_rename_path_no_lock(
                        ret = -1;
                        goto end;
                }
+       } else {
+               /* Unexpected !old_path && !path. */
+               status = LTTNG_TRACE_CHUNK_STATUS_INVALID_ARGUMENT;
+               goto end;
        }
 
 skip_move:
-       if (path) {
-               new_path = strdup(path);
-               if (!new_path) {
-                       ERR("Failed to allocate new trace chunk path");
-                       status = LTTNG_TRACE_CHUNK_STATUS_ERROR;
-                       goto end;
-               }
-       } else {
-               new_path = NULL;
+       new_path = strdup(path);
+       if (!new_path) {
+               ERR("Failed to allocate new trace chunk path");
+               status = LTTNG_TRACE_CHUNK_STATUS_ERROR;
+               goto end;
        }
        free(chunk->path);
        chunk->path = new_path;
This page took 0.024316 seconds and 5 git commands to generate.