From: Jo-Philipp Wich Date: Sat, 30 Nov 2013 16:47:08 +0000 (+0000) Subject: validate: fix length calculation of string literals and store value type for literal... X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fubox.git;a=commitdiff_plain;h=186b35cc9582b3d925e51ed86f58e78b75b5ed20 validate: fix length calculation of string literals and store value type for literal comparisations --- 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: