Fix: unchecked return values of bt_value getters
[babeltrace.git] / cli / babeltrace.c
index 7c19c273870978f4a370a219c9799a4a8111bfc7..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>
@@ -77,6 +78,7 @@ static const char* log_level_env_var_names[] = {
        "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,
 };
@@ -293,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;
@@ -304,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);
@@ -341,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, "- ");
 
@@ -385,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
@@ -594,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
This page took 0.026088 seconds and 4 git commands to generate.