summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorFergus Dall <sidereal@google.com>2021-06-22 19:31:26 +1000
committerFergus Dall <sidereal@google.com>2021-06-22 20:15:39 +1000
commitccc9612e823601f9bb7675bf2b029fd6eed6ed7b (patch)
tree41155da2455aac4c9ca8a37f2853b56af6aaf244 /tests
parent4f53613e70cfc8eb23a91d289c79dc67f1114088 (diff)
downloadwayland-ccc9612e823601f9bb7675bf2b029fd6eed6ed7b.tar.gz
connection: Handle non-nullable strings in wl_connection_demarshal
Currently a null string passed into a non-nullable argument of a message will decode succesfully, probably resulting in the handler function crashing. Instead treat it the same way we do non-nullable objects and ids. Signed-off-by: Fergus Dall <sidereal@google.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/connection-test.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/tests/connection-test.c b/tests/connection-test.c
index 669d73b..7220d87 100644
--- a/tests/connection-test.c
+++ b/tests/connection-test.c
@@ -553,6 +553,24 @@ expected_fail_demarshal(struct marshal_data *data, const char *format,
assert(errno == expected_error);
}
+TEST(connection_demarshal_null_strings)
+{
+ struct marshal_data data;
+ uint32_t msg[3];
+
+ setup_marshal_data(&data);
+
+ data.value.s = NULL;
+ msg[0] = 400200; /* object id */
+ msg[1] = 12 << 16; /* size = 12, opcode = 0 */
+ msg[2] = 0; /* string length = 0 */
+ demarshal(&data, "?s", msg, (void *) validate_demarshal_s);
+
+ expected_fail_demarshal(&data, "s", msg, EINVAL);
+
+ release_marshal_data(&data);
+}
+
/* These tests are verifying that the demarshaling code will gracefully handle
* clients lying about string and array lengths and giving values near
* UINT32_MAX. Before fixes f7fdface and f5b9e3b9 this test would crash on