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

Ben Pfaff blp at nicira.com
Thu Jan 24 22:44:30 UTC 2013


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




More information about the dev mailing list