diff options
author | Jonas Ådahl <jadahl@gmail.com> | 2014-05-08 23:39:47 +0200 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2014-05-09 14:31:28 -0700 |
commit | 99a72777f96f63e4e25dc528bb37115424adac59 (patch) | |
tree | e5247d025bef1157c7ea462fa06b9fee7b85ce43 | |
parent | 3ed76204a9bb5dfe652113ea2e494ad688e22cea (diff) |
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>
-rw-r--r-- | src/scanner.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/scanner.c b/src/scanner.c index dd1c7b6..28fadb0 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -404,12 +404,14 @@ start_element(void *data, const char *element_name, const char **atts) if (errno == EINVAL || end == since || *end != '\0') fail(&ctx->loc, "invalid integer (%s)\n", since); - if (version < ctx->interface->since) - fail(&ctx->loc, "since version not increasing\n"); - ctx->interface->since = version; + } else { + version = 1; } - message->since = ctx->interface->since; + if (version < ctx->interface->since) + fail(&ctx->loc, "since version not increasing\n"); + ctx->interface->since = version; + message->since = version; if (strcmp(name, "destroy") == 0 && !message->destructor) fail(&ctx->loc, "destroy request should be destructor type"); |