Index: main/manager.c =================================================================== --- main/manager.c (revision 72098) +++ main/manager.c (working copy) @@ -1636,17 +1636,25 @@ /* FIXME: Wedge a ActionID response in here, waiting for later changes */ ast_cli_command(fd, cmd); /* XXX need to change this to use a FILE * */ l = lseek(fd, 0, SEEK_END); /* how many chars available */ - buf = alloca(l + 1); - final_buf = alloca(l + 1); - lseek(fd, 0, SEEK_SET); - read(fd, buf, l); - buf[l] = '\0'; + + /* This has a potential to overflow the stack. Hence, use the heap. */ + buf = ast_calloc(1, l + 1); + final_buf = ast_calloc(1, l + 1); + if (buf) { + lseek(fd, 0, SEEK_SET); + read(fd, buf, l); + buf[l] = '\0'; + if (final_buf) { + term_strip(final_buf, buf, l); + final_buf[l] = '\0'; + } + astman_append(s, S_OR(final_buf, buf)); + } close(fd); unlink(template); - term_strip(final_buf, buf, l); - final_buf[l] = '\0'; - astman_append(s, final_buf); astman_append(s, "--END COMMAND--\r\n\r\n"); + ast_free(buf); + ast_free(final_buf); return 0; }