scanner: Also fail when an implicitly versioned message is out of order
authorJonas Ådahl <jadahl@gmail.com>
Thu, 8 May 2014 21:39:47 +0000 (23:39 +0200)
committerKristian Høgsberg <krh@bitplanet.net>
Fri, 9 May 2014 21:31:28 +0000 (14:31 -0700)
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>
src/scanner.c

index dd1c7b6..28fadb0 100644 (file)
@@ -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");