summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2014-05-08 23:39:47 +0200
committerKristian Høgsberg <krh@bitplanet.net>2014-05-09 14:31:28 -0700
commit99a72777f96f63e4e25dc528bb37115424adac59 (patch)
treee5247d025bef1157c7ea462fa06b9fee7b85ce43
parent3ed76204a9bb5dfe652113ea2e494ad688e22cea (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.c10
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");