scanner: Also fail when an implicitly versioned message is out of order

Fail if a message with version implicitly set to 1 (i.e. not specified)
comes after a message with since-version > 1.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
This commit is contained in:
Jonas Ådahl 2014-05-08 23:39:47 +02:00 committed by Kristian Høgsberg
parent 3ed76204a9
commit 99a72777f9

View file

@ -404,12 +404,14 @@ start_element(void *data, const char *element_name, const char **atts)
if (errno == EINVAL || end == since || *end != '\0') if (errno == EINVAL || end == since || *end != '\0')
fail(&ctx->loc, fail(&ctx->loc,
"invalid integer (%s)\n", since); "invalid integer (%s)\n", since);
} else {
version = 1;
}
if (version < ctx->interface->since) if (version < ctx->interface->since)
fail(&ctx->loc, "since version not increasing\n"); fail(&ctx->loc, "since version not increasing\n");
ctx->interface->since = version; ctx->interface->since = version;
} message->since = version;
message->since = ctx->interface->since;
if (strcmp(name, "destroy") == 0 && !message->destructor) if (strcmp(name, "destroy") == 0 && !message->destructor)
fail(&ctx->loc, "destroy request should be destructor type"); fail(&ctx->loc, "destroy request should be destructor type");