summaryrefslogtreecommitdiff
path: root/validate
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2013-11-30 16:47:08 +0000
committerJo-Philipp Wich <jow@openwrt.org>2013-11-30 17:20:48 +0000
commit186b35cc9582b3d925e51ed86f58e78b75b5ed20 (patch)
treea7e05dff054d068b4def68dd2ce488d4587731b8 /validate
parentb7d977e9800692765445c7806d05d87046c34cb6 (diff)
downloadubox-186b35cc9582b3d925e51ed86f58e78b75b5ed20.tar.gz
validate: fix length calculation of string literals and store value type for literal comparisations
Diffstat (limited to 'validate')
-rw-r--r--validate/validate.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/validate/validate.c b/validate/validate.c
index a146eda..046e4bd 100644
--- a/validate/validate.c
+++ b/validate/validate.c
@@ -99,7 +99,7 @@ dt_test_string(const char *s, const char *end, const char *value)
s++;
}
- return (*s == *value || (s > end && *value == 0));
+ return (*s == *value || (s >= end && *value == 0));
}
static bool
@@ -796,7 +796,7 @@ dt_parse_atom(struct dt_state *s, const char *label, const char *end)
{
op->next = p + 1;
op->type = OP_STRING;
- op->length = (p - label) - 2;
+ op->length = (p - label) - 1;
op->value.string = label + 1;
op->nextop = ++s->depth;
@@ -951,10 +951,14 @@ dt_step(struct dt_state *s)
{
case OP_NUMBER:
rv = dt_test_number(op->value.number, s->value);
+ if (rv)
+ s->valtype = DT_NUMBER;
break;
case OP_STRING:
rv = dt_test_string(op->value.string, op->value.string + op->length, s->value);
+ if (rv)
+ s->valtype = DT_STRING;
break;
case OP_FUNCTION: