commit 3bc3ad41085ae6947f39912b0744a3eaf48bf4a3
parent d558de603d29a0054e93294272861fd3ea2f0785
Author: Santtu Lakkala <inz@inz.fi>
Date: Mon, 20 Jul 2020 10:44:47 +0300
Fix crashes
The process() function exepcted terminating zero, which is not used, use
length checks instead.
Diffstat:
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/nyancat.c b/nyancat.c
@@ -311,16 +311,18 @@ ssize_t lc_process(struct lolcat *lc, const char *buffer, int32_t len)
return ip;
if (c == '\x1b') {
- if (!buffer[i])
+ if (i >= len)
return ip;
if (buffer[i] == '[') {
size_t n_args;
char cmd;
+ if (i + 1 >= len)
+ return ip;
if (buffer[i + 1] == '?') {
n_args = strnspn(buffer + i + 2,
len - i - 2,
"0123456789;");
- if (!buffer[i + 2 + n_args])
+ if (i + 2 + n_args >= len)
return ip;
lc->write(buffer + ip, n_args + 4,
lc->write_data);
@@ -329,6 +331,8 @@ ssize_t lc_process(struct lolcat *lc, const char *buffer, int32_t len)
}
n_args = strnspn(buffer + i + 1, len - i - 1,
"0123456789;");
+ if (i + 1 + n_args >= len)
+ return ip;
cmd = buffer[i + 1 + n_args];
if (!cmd)
@@ -402,12 +406,9 @@ ssize_t lc_process(struct lolcat *lc, const char *buffer, int32_t len)
}
if (buffer[i] == '(') {
size_t n_args;
- char cmd;
n_args = strnspn(buffer + i + 1, len - i - 1,
"0123456789;");
- cmd = buffer[i + 1 + n_args];
-
- if (!cmd)
+ if (i + 1 + n_args >= len)
return ip;
lc->write(buffer + ip, n_args + 3,