[ovs-dev] [coverity 05/12] vlog: New function vlog_set_levels_from_string_assert().

Ethan Jackson ethan at nicira.com
Fri Feb 1 21:53:46 UTC 2013


Acked-by: Ethan Jackson <ethan at nicira.com>

On Thu, Jan 24, 2013 at 2:44 PM, Ben Pfaff <blp at nicira.com> wrote:
> Two of the users of vlog_set_levels_from_string() in the tests could have
> silently failed, if their arguments were invalid.  This avoids that problem
> (and a memory leak).
>
> Found by Coverity.
>
> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
>  lib/vlog.c       |   10 ++++++++++
>  lib/vlog.h       |    5 +++--
>  tests/test-odp.c |    6 +++---
>  3 files changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/lib/vlog.c b/lib/vlog.c
> index 7867b07..8bc9938 100644
> --- a/lib/vlog.c
> +++ b/lib/vlog.c
> @@ -431,6 +431,16 @@ exit:
>      return msg;
>  }
>
> +/* Set debugging levels.  Abort with an error message if 's' is invalid. */
> +void
> +vlog_set_levels_from_string_assert(const char *s)
> +{
> +    char *error = vlog_set_levels_from_string(s);
> +    if (error) {
> +        ovs_fatal(0, "%s", error);
> +    }
> +}
> +
>  /* If 'arg' is null, configure maximum verbosity.  Otherwise, sets
>   * configuration according to 'arg' (see vlog_set_levels_from_string()). */
>  void
> diff --git a/lib/vlog.h b/lib/vlog.h
> index 2595772..ab746c8 100644
> --- a/lib/vlog.h
> +++ b/lib/vlog.h
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc.
> + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
>   *
>   * Licensed under the Apache License, Version 2.0 (the "License");
>   * you may not use this file except in compliance with the License.
> @@ -114,7 +114,8 @@ struct vlog_rate_limit {
>  enum vlog_level vlog_get_level(const struct vlog_module *, enum vlog_facility);
>  void vlog_set_levels(struct vlog_module *,
>                       enum vlog_facility, enum vlog_level);
> -char *vlog_set_levels_from_string(const char *);
> +char *vlog_set_levels_from_string(const char *) WARN_UNUSED_RESULT;
> +void vlog_set_levels_from_string_assert(const char *);
>  char *vlog_get_levels(void);
>  bool vlog_is_enabled(const struct vlog_module *, enum vlog_level);
>  bool vlog_should_drop(const struct vlog_module *, enum vlog_level,
> diff --git a/tests/test-odp.c b/tests/test-odp.c
> index 5ed31a9..268a105 100644
> --- a/tests/test-odp.c
> +++ b/tests/test-odp.c
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright (c) 2011, 2012 Nicira, Inc.
> + * Copyright (c) 2011, 2012, 2013 Nicira, Inc.
>   *
>   * Licensed under the Apache License, Version 2.0 (the "License");
>   * you may not use this file except in compliance with the License.
> @@ -32,7 +32,7 @@ parse_keys(void)
>      struct ds in;
>
>      ds_init(&in);
> -    vlog_set_levels_from_string("odp_util:console:dbg");
> +    vlog_set_levels_from_string_assert("odp_util:console:dbg");
>      while (!ds_get_test_line(&in, stdin)) {
>          enum odp_key_fitness fitness;
>          struct ofpbuf odp_key;
> @@ -98,7 +98,7 @@ parse_actions(void)
>      struct ds in;
>
>      ds_init(&in);
> -    vlog_set_levels_from_string("odp_util:console:dbg");
> +    vlog_set_levels_from_string_assert("odp_util:console:dbg");
>      while (!ds_get_test_line(&in, stdin)) {
>          struct ofpbuf odp_actions;
>          struct ds out;
> --
> 1.7.2.5
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list