vici: Return default value for get_int() if message value is empty string
authorMartin Willi <martin@revosec.ch>
Tue, 14 Oct 2014 10:13:32 +0000 (12:13 +0200)
committerMartin Willi <martin@revosec.ch>
Tue, 14 Oct 2014 14:33:10 +0000 (16:33 +0200)
This is the behavior of some strtol() implementations, and it makes sense,
so force it.

src/libcharon/plugins/vici/suites/test_message.c
src/libcharon/plugins/vici/vici_message.c

index 2931173..e76d273 100644 (file)
@@ -347,7 +347,7 @@ START_TEST(test_get_int)
        ck_assert_int_eq(m->get_int(m, 2, "section1.key2"), 0x12);
        ck_assert_int_eq(m->get_int(m, 2, "section1.section2.key3"), -1);
        ck_assert_int_eq(m->get_int(m, 2, "section1.key4"), 2);
        ck_assert_int_eq(m->get_int(m, 2, "section1.key2"), 0x12);
        ck_assert_int_eq(m->get_int(m, 2, "section1.section2.key3"), -1);
        ck_assert_int_eq(m->get_int(m, 2, "section1.key4"), 2);
-       ck_assert_int_eq(m->get_int(m, 2, "key5"), 0);
+       ck_assert_int_eq(m->get_int(m, 2, "key5"), 2);
        ck_assert_int_eq(m->get_int(m, 2, "nonexistent"), 2);
        ck_assert_int_eq(m->get_int(m, 2, "n.o.n.e.x.i.s.t.e.n.t"), 2);
 
        ck_assert_int_eq(m->get_int(m, 2, "nonexistent"), 2);
        ck_assert_int_eq(m->get_int(m, 2, "n.o.n.e.x.i.s.t.e.n.t"), 2);
 
index dcc175f..e79fbc8 100644 (file)
@@ -355,6 +355,10 @@ METHOD(vici_message_t, vget_int, int,
        found = find_value(this, &value, fmt, args);
        if (found)
        {
        found = find_value(this, &value, fmt, args);
        if (found)
        {
+               if (value.len == 0)
+               {
+                       return def;
+               }
                if (chunk_printable(value, NULL, 0))
                {
                        snprintf(buf, sizeof(buf), "%.*s", (int)value.len, value.ptr);
                if (chunk_printable(value, NULL, 0))
                {
                        snprintf(buf, sizeof(buf), "%.*s", (int)value.len, value.ptr);