Fix: unchecked return values of bt_value getters
[babeltrace.git] / cli / babeltrace.c
index 8b3d0c0fc9bea3d8037d75aa3b4ed3326722c5fe..6920aabc6e697a2c07e03071ac4971e658afea60 100644 (file)
@@ -43,6 +43,7 @@
 #include <babeltrace/graph/notification-iterator.h>
 #include <babeltrace/ref.h>
 #include <babeltrace/values.h>
+#include <babeltrace/values-internal.h>
 #include <babeltrace/logging.h>
 #include <unistd.h>
 #include <stdlib.h>
@@ -73,7 +74,11 @@ static const char* log_level_env_var_names[] = {
        "BABELTRACE_PLUGIN_CTF_METADATA_LOG_LEVEL",
        "BABELTRACE_PLUGIN_CTF_NOTIF_ITER_LOG_LEVEL",
        "BABELTRACE_PLUGIN_LTTNG_UTILS_DEBUG_INFO_FLT_LOG_LEVEL",
+       "BABELTRACE_PLUGIN_TEXT_DMESG_SRC_LOG_LEVEL",
+       "BABELTRACE_PLUGIN_UTILS_MUXER_FLT_LOG_LEVEL",
        "BABELTRACE_PLUGIN_UTILS_TRIMMER_FLT_LOG_LEVEL",
+       "BABELTRACE_PLUGIN_CTFCOPYTRACE_LIB_LOG_LEVEL",
+       "BABELTRACE_PLUGIN_CTF_FS_SINK_LOG_LEVEL",
        "BABELTRACE_PYTHON_PLUGIN_PROVIDER_LOG_LEVEL",
        NULL,
 };
@@ -290,6 +295,7 @@ void print_value_rec(FILE *fp, struct bt_value *value, size_t indent)
        const char *str_val;
        int size;
        int i;
+       enum bt_value_status status;
 
        if (!value) {
                return;
@@ -301,32 +307,46 @@ void print_value_rec(FILE *fp, struct bt_value *value, size_t indent)
                        bt_common_color_reset());
                break;
        case BT_VALUE_TYPE_BOOL:
-               bt_value_bool_get(value, &bool_val);
+               status = bt_value_bool_get(value, &bool_val);
+               if (status != BT_VALUE_STATUS_OK) {
+                       goto error;
+               }
                fprintf(fp, "%s%s%s%s\n", bt_common_color_bold(),
                        bt_common_color_fg_cyan(), bool_val ? "yes" : "no",
                        bt_common_color_reset());
                break;
        case BT_VALUE_TYPE_INTEGER:
-               bt_value_integer_get(value, &int_val);
+               status = bt_value_integer_get(value, &int_val);
+               if (status != BT_VALUE_STATUS_OK) {
+                       goto error;
+               }
                fprintf(fp, "%s%s%" PRId64 "%s\n", bt_common_color_bold(),
                        bt_common_color_fg_red(), int_val,
                        bt_common_color_reset());
                break;
        case BT_VALUE_TYPE_FLOAT:
-               bt_value_float_get(value, &dbl_val);
+               status = bt_value_float_get(value, &dbl_val);
+               if (status != BT_VALUE_STATUS_OK) {
+                       goto error;
+               }
                fprintf(fp, "%s%s%lf%s\n", bt_common_color_bold(),
                        bt_common_color_fg_red(), dbl_val,
                        bt_common_color_reset());
                break;
        case BT_VALUE_TYPE_STRING:
-               bt_value_string_get(value, &str_val);
+               status = bt_value_string_get(value, &str_val);
+               if (status != BT_VALUE_STATUS_OK) {
+                       goto error;
+               }
                fprintf(fp, "%s%s%s%s\n", bt_common_color_bold(),
                        bt_common_color_fg_green(), str_val,
                        bt_common_color_reset());
                break;
        case BT_VALUE_TYPE_ARRAY:
                size = bt_value_array_size(value);
-               assert(size >= 0);
+               if (size < 0) {
+                       goto error;
+               }
 
                if (size == 0) {
                        print_indent(fp, indent);
@@ -338,7 +358,9 @@ void print_value_rec(FILE *fp, struct bt_value *value, size_t indent)
                        struct bt_value *element =
                                        bt_value_array_get(value, i);
 
-                       assert(element);
+                       if (!element) {
+                               goto error;
+                       }
                        print_indent(fp, indent);
                        fprintf(fp, "- ");
 
@@ -382,6 +404,11 @@ void print_value_rec(FILE *fp, struct bt_value *value, size_t indent)
        default:
                abort();
        }
+       return;
+
+error:
+       BT_LOGE("Error printing value of type %s.",
+               bt_value_type_string(bt_value_get_type(value)));
 }
 
 static
@@ -591,10 +618,15 @@ int load_dynamic_plugins(struct bt_value *plugin_paths)
                struct bt_value *plugin_path_value = NULL;
                const char *plugin_path;
                struct bt_plugin_set *plugin_set;
+               enum bt_value_status status;
 
                plugin_path_value = bt_value_array_get(plugin_paths, i);
-               bt_value_string_get(plugin_path_value, &plugin_path);
-               assert(plugin_path);
+               status = bt_value_string_get(plugin_path_value, &plugin_path);
+               if (status != BT_VALUE_STATUS_OK) {
+                       BT_LOGD_STR("Cannot get plugin path string.");
+                       BT_PUT(plugin_path_value);
+                       continue;
+               }
 
                /*
                 * Skip this if the directory does not exist because
@@ -1419,8 +1451,8 @@ int cmd_run_ctx_connect_upstream_port_to_downstream_component(
                assert(upstream_port_name);
 
                if (!bt_common_star_glob_match(
-                               cfg_conn->downstream_port_glob->str, -1ULL,
-                               downstream_port_name, -1ULL)) {
+                               cfg_conn->downstream_port_glob->str, SIZE_MAX,
+                               downstream_port_name, SIZE_MAX)) {
                        bt_put(downstream_port);
                        continue;
                }
@@ -1633,7 +1665,7 @@ int cmd_run_ctx_connect_upstream_port(struct cmd_run_ctx *ctx,
 
                if (!bt_common_star_glob_match(
                            cfg_conn->upstream_port_glob->str,
-                           -1ULL, upstream_port_name, -1ULL)) {
+                           SIZE_MAX, upstream_port_name, SIZE_MAX)) {
                        continue;
                }
 
@@ -1771,7 +1803,7 @@ void cmd_run_ctx_destroy(struct cmd_run_ctx *ctx)
 
        if (ctx->intersections) {
                g_hash_table_destroy(ctx->intersections);
-               ctx->components = NULL;
+               ctx->intersections = NULL;
        }
 
        BT_PUT(ctx->graph);
@@ -2008,7 +2040,6 @@ int set_stream_intersections(struct cmd_run_ctx *ctx,
                 */
                for (stream_idx = 0; stream_idx < stream_count; stream_idx++) {
                        const char *stream_path;
-                       gboolean hash_ret;
 
                        port_id = g_new0(struct port_id, 1);
                        if (!port_id) {
@@ -2071,9 +2102,7 @@ int set_stream_intersections(struct cmd_run_ctx *ctx,
 
                        BT_LOGD("Inserting stream intersection ");
 
-                       hash_ret = g_hash_table_insert(ctx->intersections,
-                               port_id, trace_range);
-                       assert(hash_ret);
+                       g_hash_table_insert(ctx->intersections, port_id, trace_range);
 
                        port_id = NULL;
                        trace_range = NULL;
@@ -2574,9 +2603,9 @@ void set_auto_log_levels(struct bt_config *cfg)
        while (*env_var_name) {
                if (!getenv(*env_var_name)) {
                        if (cfg->verbose) {
-                               setenv(*env_var_name, "I", 1);
+                               g_setenv(*env_var_name, "I", 1);
                        } else if (cfg->debug) {
-                               setenv(*env_var_name, "V", 1);
+                               g_setenv(*env_var_name, "V", 1);
                        } else {
                                char val[2] = { 0 };
 
@@ -2585,7 +2614,7 @@ void set_auto_log_levels(struct bt_config *cfg)
                                 * explicitly specified.
                                 */
                                val[0] = cfg->log_level;
-                               setenv(*env_var_name, val, 1);
+                               g_setenv(*env_var_name, val, 1);
                        }
                }
 
This page took 0.025553 seconds and 4 git commands to generate.