summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2015-11-04 14:21:52 +0800
committerJonas Ådahl <jadahl@gmail.com>2016-01-12 12:05:47 +0800
commit3de1783e5038639128bb37f2937eeee3e36aefe6 (patch)
treeb9bcfdbeae35890b3f82497ebb37464b3098fc6b
parent2f666ee34fb414f43def75c1caa1243feb349f8d (diff)
downloadwayland-3de1783e5038639128bb37f2937eeee3e36aefe6.tar.gz
scanner: Fail if 'since' is higher than the interface version
If an event or request have a "since" attribute that is larger than the version of the interface it is in, fail with an explaining error message. Signed-off-by: Jonas Ådahl <jadahl@gmail.com> Reviewed-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Marek Chalupa <mchqwerty@gmail.com> Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
-rw-r--r--src/scanner.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/scanner.c b/src/scanner.c
index 3f79a44..b00f036 100644
--- a/src/scanner.c
+++ b/src/scanner.c
@@ -674,8 +674,12 @@ start_element(void *data, const char *element_name, const char **atts)
if (since != NULL) {
version = strtouint(since);
- if (version == -1)
+ if (version == -1) {
fail(&ctx->loc, "invalid integer (%s)\n", since);
+ } else if (version > ctx->interface->version) {
+ fail(&ctx->loc, "since (%u) larger than version (%u)\n",
+ version, ctx->interface->version);
+ }
} else {
version = 1;
}