Fix: Clamp verbosity value read from config file
[lttng-tools.git] / src / bin / lttng-sessiond / main.c
index 4d700d1e54130fae8ae19369e8bdc8e3b7ca7771..6a918ec56a73926621a20119eb3e3686d0f3d998 100644 (file)
@@ -4199,6 +4199,10 @@ static int set_option(int opt, const char *arg, const char *optname)
                break;
        case 'g':
                tracing_group_name = strdup(arg);
+               if (!tracing_group_name) {
+                       perror("strdup");
+                       ret = -ENOMEM;
+               }
                break;
        case 'h':
                usage();
@@ -4236,13 +4240,15 @@ static int set_option(int opt, const char *arg, const char *optname)
        case 'v':
                /* Verbose level can increase using multiple -v */
                if (arg) {
+                       /* Value obtained from config file */
                        lttng_opt_verbose = config_parse_value(arg);
                } else {
-                       /* Only 3 level of verbosity (-vvv). */
-                       if (lttng_opt_verbose < 3) {
-                               lttng_opt_verbose += 1;
-                       }
+                       /* -v used on command line */
+                       lttng_opt_verbose++;
                }
+               /* Clamp value to [0, 3] */
+               lttng_opt_verbose = lttng_opt_verbose < 0 ? 0 :
+                       (lttng_opt_verbose <= 3 ? lttng_opt_verbose : 3);
                break;
        case 'Z':
                if (arg) {
@@ -4253,22 +4259,42 @@ static int set_option(int opt, const char *arg, const char *optname)
                break;
        case 'u':
                consumerd32_bin = strdup(arg);
+               if (!consumerd32_bin) {
+                       perror("strdup");
+                       ret = -ENOMEM;
+               }
                consumerd32_bin_override = 1;
                break;
        case 'U':
                consumerd32_libdir = strdup(arg);
+               if (!consumerd32_libdir) {
+                       perror("strdup");
+                       ret = -ENOMEM;
+               }
                consumerd32_libdir_override = 1;
                break;
        case 't':
                consumerd64_bin = strdup(arg);
+               if (!consumerd64_bin) {
+                       perror("strdup");
+                       ret = -ENOMEM;
+               }
                consumerd64_bin_override = 1;
                break;
        case 'T':
                consumerd64_libdir = strdup(arg);
+               if (!consumerd64_libdir) {
+                       perror("strdup");
+                       ret = -ENOMEM;
+               }
                consumerd64_libdir_override = 1;
                break;
        case 'p':
                opt_pidfile = strdup(arg);
+               if (!opt_pidfile) {
+                       perror("strdup");
+                       ret = -ENOMEM;
+               }
                break;
        case 'J': /* JUL TCP port. */
        {
@@ -4297,6 +4323,10 @@ static int set_option(int opt, const char *arg, const char *optname)
                break;
        case 'P': /* probe modules list */
                kmod_probes_list = strdup(arg);
+               if (!kmod_probes_list) {
+                       perror("strdup");
+                       ret = -ENOMEM;
+               }
                break;
        case 'f':
                /* This is handled in set_options() thus silent break. */
This page took 0.027156 seconds and 4 git commands to generate.