From 4c745dab4c6925fa17714c2214ed5941e5cbf64d Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Thu, 20 Feb 2025 20:24:28 +0100 Subject: Validate unmarshalled state + add man pages for (un)marshal functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libterminput_unmarshal_state.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'libterminput_unmarshal_state.c') diff --git a/libterminput_unmarshal_state.c b/libterminput_unmarshal_state.c index fd1d6db..a41c4fe 100644 --- a/libterminput_unmarshal_state.c +++ b/libterminput_unmarshal_state.c @@ -5,5 +5,30 @@ int libterminput_unmarshal_state(struct libterminput_unmarshaller *how, struct libterminput_state *what) /* TODO test */ { - return how->load(how, what, sizeof(*what)); + if (how->load(how, what, sizeof(*what))) + return -1; + if (what->inited < 0 || what->inited > 1 || + what->bracketed_paste > 1U || + what->meta > 2U || + what->n >= sizeof(what->partial) || + what->npartial >= sizeof(what->partial) || + what->stored_tail > what->stored_head || + what->stored_head > sizeof(what->stored) || + what->unused_bits) + goto einval; + switch (what->mouse_tracking) { + case 0: + case 1: + case 2: + case 3: + case 6: + break; + default: + goto einval; + } + return 0; + +einval: + errno = EINVAL; + return -1; } -- cgit v1.2.3-70-g09d2