HTRACE-224. htrace C client: htrace_conf_get_u64, htrace_conf_get_double can't handle spaces at the end of strings (cmccabe)
diff --git a/htrace-c/src/core/conf.c b/htrace-c/src/core/conf.c
index 08fbb8c..c004fad 100644
--- a/htrace-c/src/core/conf.c
+++ b/htrace-c/src/core/conf.c
@@ -178,11 +178,12 @@
if (c == '\0') {
break;
}
- if ((c != ' ') || (c != '\t')) {
+ if (!((c == ' ') || (c == '\t'))) {
htrace_log(log, "error parsing %s for %s: garbage at end "
"of string.\n", in, key);
return 0;
}
+ endptr++;
}
*out = ret;
return 1;
@@ -229,11 +230,12 @@
if (c == '\0') {
break;
}
- if ((c != ' ') || (c != '\t')) {
+ if (!((c == ' ') || (c == '\t'))) {
htrace_log(log, "error parsing %s for %s: garbage at end "
"of string.\n", in, key);
return 0;
}
+ endptr++;
}
*out = ret;
return 1;
diff --git a/htrace-c/src/test/conf-unit.c b/htrace-c/src/test/conf-unit.c
index debc866..715141f 100644
--- a/htrace-c/src/test/conf-unit.c
+++ b/htrace-c/src/test/conf-unit.c
@@ -29,7 +29,9 @@
{
struct htrace_conf *conf;
struct htrace_log *lg;
- conf = htrace_conf_from_strs("foo=bar;foo2=baz;foo3=quux;foo5=123",
+ conf = htrace_conf_from_strs("foo=bar;foo2=baz;foo3=quux;foo5=123;"
+ "garbage.at.end=1234garbage;"
+ "whitespace.at.end=123\t \t",
"foo3=default3;foo4=default4");
lg = htrace_log_alloc(conf);
EXPECT_NONNULL(conf);
@@ -39,6 +41,8 @@
EXPECT_UINT64_EQ((uint64_t)123, htrace_conf_get_u64(lg, conf, "foo5"));
EXPECT_UINT64_EQ((uint64_t)123, htrace_conf_get_u64(lg, conf, "foo5"));
EXPECT_NULL(htrace_conf_get(conf, "unknown"));
+ EXPECT_UINT64_EQ((uint64_t)0, htrace_conf_get_u64(lg, conf, "garbage.at.end"));
+ EXPECT_UINT64_EQ((uint64_t)123, htrace_conf_get_u64(lg, conf, "whitespace.at.end"));
htrace_log_free(lg);
htrace_conf_free(conf);
@@ -51,7 +55,9 @@
struct htrace_log *lg;
double d;
- conf = htrace_conf_from_strs("my.double=5.4;bozo=wakkawakkaa",
+ conf = htrace_conf_from_strs("my.double=5.4;bozo=wakkawakkaa;"
+ "garbage.at.end=1.0garbage;"
+ "tabs.at.end=5.0\t\t",
"my.double=1.1;bozo=2.0");
EXPECT_NONNULL(conf);
lg = htrace_log_alloc(conf);
@@ -78,6 +84,18 @@
"got %g\n", d);
return EXIT_FAILURE;
}
+ d = htrace_conf_get_double(lg, conf, "garbage.at.end");
+ if ((d > 0.001) || (d < -0.001)) {
+ htrace_log(lg, "failed to parse garbage.at.end... expected 0.0, "
+ "got %g\n", d);
+ return EXIT_FAILURE;
+ }
+ d = htrace_conf_get_double(lg, conf, "tabs.at.end");
+ if ((d > 5.001) || (d < 4.990)) {
+ htrace_log(lg, "failed to parse tabs.at.end... expected 5.0, "
+ "got %g\n", d);
+ return EXIT_FAILURE;
+ }
htrace_log_free(lg);
htrace_conf_free(conf);