// Entry point for LibFuzzer. int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { struct tsm_screen *screen; struct tsm_vte *vte; const int scrollback_size = 200; // frecon use 200 tsm_screen_new(&screen, NULL, NULL); tsm_screen_set_max_sb(screen, scrollback_size); tsm_vte_new(&vte, screen, terminal_write_fn, NULL, NULL, NULL); tsm_screen_resize(screen, WIDTH, HEIGHT); tsm_vte_input(vte, (const char*) data, size); tsm_screen_draw(screen, term_draw_cell, NULL); tsm_vte_unref(vte); tsm_screen_unref(screen); return 0; }
int main(int argc, char** argv) { const char* val; if (tsm_screen_new(&term.screen, tsm_log, 0) < 0){ printf("fatal, couldn't setup tsm screen\n"); return EXIT_FAILURE; } if (tsm_vte_new(&term.vte, term.screen, write_callback, NULL /* write_cb_data */, tsm_log, NULL /* tsm_log_data */) < 0){ printf("fatal, couldn't setup vte\n"); return EXIT_FAILURE; } tsm_screen_set_max_sb(term.screen, 1000); setlocale(LC_CTYPE, "C"); signal(SIGHUP, SIG_IGN); if ( (term.child = shl_pty_open(&term.pty, read_callback, NULL, 10, 5)) == 0){ setup_shell(); exit(EXIT_FAILURE); } if (term.child < 0){ printf("couldn't spawn child terminal.\n"); return EXIT_FAILURE; } short pollev = POLLIN | POLLERR | POLLNVAL | POLLHUP; int ptyfd = shl_pty_get_fd(term.pty); int age = 0; tsm_screen_resize(term.screen, 10, 5); shl_pty_resize(term.pty, 10, 5); while(1){ int pc = 2; struct pollfd fds[3] = { { .fd = ptyfd, .events = pollev}, { .fd = STDIN_FILENO, .events = pollev} };