diff --git a/repos/os/src/test/terminal_expect_send/main.cc b/repos/os/src/test/terminal_expect_send/main.cc index 185e69d09e..7d64a8939a 100644 --- a/repos/os/src/test/terminal_expect_send/main.cc +++ b/repos/os/src/test/terminal_expect_send/main.cc @@ -34,14 +34,21 @@ struct Main void handle_read_avail() { - size_t num_bytes = terminal.read(read_buffer, sizeof(read_buffer)); + size_t const num_bytes = terminal.read(read_buffer, sizeof(read_buffer)); for (size_t i = 0; i < num_bytes; i++) { + char const c = read_buffer[i]; + /* copy over all characters other than line-end */ - if (read_buffer[i] != '\n' && - read_buffer[i] != '\r') { - line[line_idx++] = read_buffer[i]; + if (c != '\n' && c != '\r') { + line[line_idx++] = c; + + if (line_idx >= MAX_LINE_LENGTH) { + warning("dropping characters (maximum line length exceeded)"); + line_idx = 0; + } + line[line_idx] = 0; } @@ -52,7 +59,7 @@ struct Main } /* check for line end */ - if (read_buffer[i] == '\n') { + if (c == '\n') { if (verbose) log(Cstring(line)); line_idx = 0; line[line_idx] = 0;